Проблема с добавлением ошибок в библиотеку проверки в Кохане 3
-
22-09-2019 - |
Вопрос
Мне нужно добавить некоторые ошибки к помощнику по проверке в Кохане 3.
Вот с чем я начинаю:
// validate form
$post = Validate::factory($_POST)
// Trim all fields
->filter(TRUE, 'trim')
// Rules for name
->rule('first-name', 'not_empty')
->rule('last-name', 'not_empty')
// Rules for email address
->rule('email', 'not_empty')
->rule('email', 'email')
// Rules for address stuff
->rule('address', 'not_empty')
->rule('suburb', 'not_empty')
->rule('state', 'not_empty')
->rule('postcode', 'not_empty')
// Rules for misc
->rule('phone', 'not_empty')
->rule('company', 'not_empty')
->rule('abn', 'not_empty');
Теперь я также проверяю некоторые вещи и добавлять Ошибки, если возникает проблема
if ( ! in_array($post['state'], array_keys($states))) {
$post->error('state', 'not_found');
}
if ( $this->userModel->doesEmailExist($post['email'])) {
$post->error('email', 'already_exists');
}
Я сделал немного var_dump()
на них и они находятся Возвращающиеся значения, которые должны добавить ошибку!
Однако, когда я звоню $post->check()
, Похоже, что это только подтверждает правила, которые я добавил в первом блоке кода выше.
У меня есть соответствующие значения в моем/Application/messages/join.php
<?php defined('SYSPATH') or die('No direct script access.');
return array(
'not_empty' => ':field must not be empty.',
'matches' => ':field must be the same as :param1',
'regex' => ':field does not match the required format',
'exact_length' => ':field must be exactly :param1 characters long',
'min_length' => ':field must be at least :param1 characters long',
'max_length' => ':field must be less than :param1 characters long',
'in_array' => ':field must be one of the available options',
'digit' => ':field must be a digit',
'email' => array(
'email' => 'You must enter a valid email.',
'already_exists' => 'This email is already associated with an account'
),
'name' => 'You must enter your name.',
);
Я здесь что -то не так? Спасибо
Обновлять
Я только что сделал несколько быстрых отлаживания вещей в библиотеке проверки, а именно сбрасывая _errors
собственность после каждого звонка в error
метод
Что я могу видеть, так это то, что мои ошибки добавляются, но затем перезаписаны (возможно, противоречивая с правилами, которые я добавил выше). Это нормально?
Решение
В качестве альтернативного способа (если вы не хотите взламывать ядро), вы можете использовать валидаторы обратного вызова. Тогда ваш код будет выглядеть как:
$post->callback('state', array($this, 'doesStateExist'));
$post->callback('email', array($this->userModel, 'doesEmailExist'));
Другие советы
Ты всегда должен бегать $validate->check()
Прежде чем делать свои собственные чеки и добавлять ошибки. Ответ Мезе будет лучше.
Я нашел другой способ добавления сообщений об ошибках:
$errors = array();
if (!$post->check()) {
$errors += $post->errors();
}
if (!isset($_POST['something'])) {
$errors['something'] = 'Please enter something';
}
if (empty($errors)) {
$orm->save();
return;
}
$tpl->error_fields($errors);