KO 2.3.4 - Доступ к массиву валидации из обратных вызовов в моделях

StackOverflow https://stackoverflow.com/questions/2744237

  •  02-10-2019
  •  | 
  •  

Вопрос

Извиняюсь, если это надзор или прозрачная глупость на моей части, но я не могу выяснить, как получить доступ к массиву проверки из обратного вызова в модели (с помощью ORM и KO 2.3.4). Я хочу иметь возможность добавлять конкретные сообщения об ошибках на массив проверки, если обратный вызов возвращает false.

например, этот метод реестра:

public function register(array & $array, $save = FALSE)
{
    // Initialise the validation library and setup some rules
    $array = Validation::factory($array)
            ->pre_filter('trim')
            ->add_rules('email', 'required', 'valid::email', array($this, 'email_available'))
            ->add_rules('confirm_email', 'matches[email]')
            ->add_rules('password', 'required', 'length[5,42]')
            ->add_rules('confirm_password', 'matches[password]');

    return ORM::validate($array, $save);
}

Перезвонить:

public function email_available($value)
{
    return ! (bool) $this->db
        ->where('email', $value)
        ->count_records($this->table_name);
}

Я могу добраться до доступа к текущей модели из обратного вызова, но мне было интересно, какой лучший способ добавить пользовательскую ошибку от обратного вызова?

Это было полезно?

Решение

Ваш «обратный вызов» не является обратным вызовом, а правилом. Что вы хотите:

$array->add_callback('email', array($this, 'email_available'));

Тогда ваш обратный вызов будет выглядеть так:

public function email_available(Validation $array, $input)
{
    if ($value = $array[$input])
    {
        $result = (bool) $this->db
            ->where('email', $value)
            ->count_records($this->table_name);

        if ( ! $result)
        {
            $array->add_error($input, 'Email address is not available');
        }
    }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top