Как применить правило проверки "совпадений" в Kohana 3.1?

Мне нужно знать, как применять правило проверки "совпадений" в Kohana 3.1. Я пробовал следующее правило в моей модели безуспешно:

'password_confirm' => array(
    array('matches', array(':validation', ':field', 'password')),
)

Но это всегда терпит неудачу. Я положил var_dump($array) в первой строке метода Valid::match (). Я вставляю это ниже:

/**
 * Checks if a field matches the value of another field.
 *
 * @param   array    array of values
 * @param   string   field name
 * @param   string   field name to match
 * @return  boolean
 */
public static function matches($array, $field, $match)
{
    var_dump($array);exit;
    return ($array[$field] === $array[$match]);
}

Он печатает объект типа проверки и, если я делаю var_dump($array[$field]) это печатает null,

Заранее большое спасибо.

ОБНОВЛЕНИЕ: Также я выяснил с помощью сообщения проверки, что порядок параметров правила должен быть инвертирован в это:

'password_confirm' => array(
    array('matches', array(':validation', 'password', ':field')),
)

1 ответ

Решение

Ваш синтаксис правильный, но я собираюсь угадать и сказать, что в вашей схеме БД нет столбца "password_confirm", поэтому вы пытаетесь добавить правило в поле, которое не существует.

В любом случае, правильное место для подтверждения пароля - это не ваша модель, а дополнительная проверка, которая передается вашей модели в контроллер при попытке сохранить.

Поместите это в свой пользовательский контроллер:

$user = ORM::Factory('user');

// Don't forget security, make sure you sanitize the $_POST data as needed
$user->values($_POST);

// Validate any other settings submitted
$extra_validation = Validation::factory(
    array('password' => Arr::get($_POST, 'password'),
          'password_confirm' => Arr::get($_POST, 'password_confirm'))
    );

$extra_validation->rule('password_confirm', 'matches', array(':validation', 'password_confirm', 'password'));

try 
{
    $user->save($extra_validation);
    // success
}
catch (ORM_Validation_Exception $e)
{               
   $errors = $e->errors('my_error_msgs');
   // failure
}

Также см. Документацию по проверке ORM Kohana 3.1 для получения дополнительной информации.

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