Как применить правило проверки «совпадений» в Kohana 3.1? - PullRequest
2 голосов
/ 26 мая 2011

Мне нужно знать, как применить правило проверки «совпадений» в 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]);
}

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

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

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

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

1 Ответ

4 голосов
/ 27 мая 2011

Ваш синтаксис правильный, но я собираюсь угадать и сказать, что в вашей схеме БД нет столбца '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 для получения дополнительной информации

...