Codeigniter: вызов функции контроллера как функции обратного вызова в правилах проверки

Разобраться все,

У меня есть контроллер, который расширяет CI_Controller, как это;

class MY_Controller extends CI_Controller
{

function check_unique($table, $field, $message_label, $value, $except_id){
    $query = "SELECT * FROM $table WHERE $field = $value AND id != $except_id LIMIT 1";
    if(count($this->db->query($query)->row_array()) == 0 ){
        return TRUE;
    }else{
        $this->form_validation->set_message($field, "The field '" . $message_label . "' is not available. Please try a different value.");
        return FALSE;
    }
}

}

В моем классе клиента -> функция редактирования, то есть...,

class Client extends MY_Controller
{
    function edit($id){
            $this->form_validation->set_rules("name", "Name", "required|max_length[50]");
    }
}

... Я хочу проверить, дублируется ли имя во время обновления. Есть ли способ, которым я могу вызвать функцию "check_unique" из контроллера в правилах проверки?

1 ответ

Решение

Вы можете использовать функцию обратного вызова библиотек проверки формы для вызова пользовательских функций проверки.

Поскольку ваш пользовательский метод проверки находится в MY_Controllerи вы наследуете это в своем ClientКласс это будет нормально работать следующим образом.

function edit($id){
   $this->form_validation->set_rules("name", "Name", "required|max_length[50]|callback_check_unique");
}

Помните, что вам нужно вызвать вашу функцию, используя callback_ префикс.

В функции обратного вызова вы также можете передавать аргументы. По умолчанию CI передает строковый параметр в качестве аргумента вашей функции обратного вызова. Так что вам может понадобиться немного изменить свою пользовательскую функцию

Другие вопросы по тегам