Функции контроллера CI всегда должны иметь возможность обрабатывать пользовательский ввод (т. Е. Сегменты URL), что означает, что любой может набрать все, что пожелает, и сделать запрос.Ты не можешь это остановить.Рекомендуется либо:
- Всегда указывать аргументы по умолчанию
- Использовать класс URI для получения параметров, либо
func_get_args()
- Всегда проверять наличие и целостность аргументов, передаваемых контроллеру, как вы это делаете с любым другим пользовательским вводом
Так как он гораздо более распространен, принят и проще для чтения - просто убедитесь, что всегдаукажите значения по умолчанию и подтвердите их.
Пример с вашим контроллером:
function index() {
//this is my users index view
//user can add,edit,delete cars
}
function details($id = NULL) {
if ( ! $id) {
// No ID present, maybe redirect without message
redirect('users');
}
$user = $this->user_model->get($id);
if ( ! $user) {
// ID present but no user found, redirect with error message
$this->session->set_flashdata('error_message', 'User not found');
redirect('users');
}
// We found a user, load view here etc.
}
function add() {
// Check for the presence of a $_POST value
// You could also use the Form_validation lib here
if ( ! $this->input->post('add_car')
{
$this->session->set_flashdata('error_message', 'Invalid request');
redirect('users');
}
// Try to add the car here and always redirect from here
}
Единственный другой способ - сделать метод частным или использовать именование CI _underscore()
как предложено (делая его недоступным из URL).Вы по-прежнему можете вызывать функцию в других методах, если хотите, например:
function index() {
if ($this->input->post('add_car')
{
// Call the private "_add" method
$this->_add();
}
// Load index view
}
Короче говоря, если коротко: вы не можете остановить выполнение запросов, вы можете только решить, что делать.делать, когда запрос недействителен.