Как вызвать функцию модели в качестве правила проверки

1

У меня возникла проблема с использованием библиотеки form_validation с CodeIgniter 3.x:

Я хочу использовать модельную функцию как правило проверки для ввода. Когда я отправляю свою форму, кажется, что функция вообще не называется. Согласно руководству пользователя, здесь, как я это делаю с моего контроллера:

if($this->input->post() !== false) 
    {
        $this->form_validation->set_rules(
            'username', //the post value to check
            'User Name',
            array(
                'trim',
                'required',
                array($this->user_model, 'checkUserName') // i want to call checkUserName from the user_model model
            )
        );

Я не понимаю, почему он даже не вызывает функцию checkUserName в user_model: есть ли у кого-нибудь идеи?

[EDIT]: Я видел исходный код для функции set_rules() в system/libraries/form_validation.php. Похоже, что если третий параметр не является строкой, он ничего не делает, поэтому я не могу вызвать функцию модели. userguide не выдерживает? Здесь строки кода, которые я нашел из form_validation:

// No fields? Nothing to do...
    if ( ! is_string($field) OR  ! is_string($rules) OR $field == '')
    {
        return $this;
    }
  • 0
    Загрузите файл модели в свой конструктор и убедитесь, что вы используете PHP 5.3+ !!
  • 0
    Да: я использую php 5.6.10, и модель загружается в конструктор моего контроллера.
Показать ещё 4 комментария
Теги:
codeigniter

2 ответа

0
'premium_dates' => [
        'field'  => 'premium_dates',
        'label'  => 'Premium dates',
        'rules'  => [
            'trim',
            ['validate_premium_dates', function () {
                return $this->Properties_seasons_model->validate_premium_dates();
            }],
        ],
        'errors' => [
            'validate_premium_dates' => 'Premium dates enabled. Please choose at least one Premium Date.',
        ],
    ];
0

если вы проверяете имя пользователя, чтобы не дублировать используемую встроенную функцию is_unique['table.field].
table: имя таблицы.
field: имя поля, которое будет проверяться.

$this->form_validation->set_rules('username', User Name, 'is_unique['users.username]');

это проверит пользователей dbtable для поля Username. Если предоставленное имя пользователя найдет, оно вернет имя пользователя ошибки не уникальное.

это is_unique() функция, определенная в классе form_validation:

public function is_unique($str, $field)
    {
        sscanf($field, '%[^.].%[^.]', $table, $field);
        return isset($this->CI->db)
            ? ($this->CI->db->limit(1)->get_where($table, array($field => $str))->num_rows() === 0)
            : FALSE;
    }

если вы действительно хотите назвать свою собственную функцию, тогда...
лучше всего расширить класс form_validation: как следует.

class MY_Form_validation extends CI_Form_validation {
    protected $CI;
    public function __construct()
    {
        parent::__construct();
        $this->CI =& get_instance();
    }

    public function check_user_name($str)
    {
      //here you codes goes eg.$this->CI->db->get_where(); etc.
    }
}
  • 1
    Я не хочу проверять, является ли имя пользователя уникальным: я должен проверить, существует ли оно, и проверить некоторые другие настройки, поэтому я не мог его использовать. Но, как я сказал в своем посте редактирования, странно, что в руководстве пользователя говорится о функции, которая, кажется, не реализована

Ещё вопросы

Сообщество Overcoder
Наверх
Меню