Respect\Validation\Validator - использование массива при отлове ошибок
Я пытаюсь перехватить ошибки, используя PHP-класс Respect \ Validation \ Validator с открытым исходным кодом. Я использовал их пример для создания массива проверок. Хотя кажется, что это работает нормально, я попытался перехватить все сообщения об ошибках, чтобы показать их пользователю. Я не видел никакого способа сделать это как полный массив (проверить все, сохранить все сообщения в массиве). Поэтому вместо этого я попытался циклически использовать метод проверки в Validator.
Это внутри метода класса, использующего F3 (Fat Free) Framework.
Я получаю следующую ошибку:
Cannot use object of type Respect\Validation\Validator as array
Код ниже. Как правильно выполнить эту задачу с использованием массивов здесь? Спасибо за помощь!
$registerValidator = Respect\Validation\Validator::attribute('email', Respect\Validation\Validator::email()->length(1,null)->notEmpty())
->attribute('address', Respect\Validation\Validator::stringType()->length(3,null)->notEmpty())
->attribute('city', Respect\Validation\Validator::alpha()->length(2,60)->notEmpty())
->attribute('state', Respect\Validation\Validator::alpha()->length(2,2)->notEmpty())
->attribute('zip', Respect\Validation\Validator::intType()->length(5,5)->notEmpty());
foreach($this->f3->get('POST') as $key => $value){
try{
$registerValidator[$key]->check($value);
} catch (\InvalidArgumentException $e) {
$errors = $e->getMainMessage();
$this->userMessage($errors, 'warning');
$this->f3->reroute('/register');
}
}
Я также попытался использовать метод assert, как указано в их документах, но, используя приведенные ниже изменения, я получаю другую ошибку при 500 Внутренняя ошибка сервера, вместо того, чтобы увидеть мое эхо:
try{
$registerValidator->assert($this->f3->get('POST'));
} catch (Respect\Validation\Validator\NestedValidationException $e) {
$errors = $e->getMessages();
echo($errors); // I can't even get here.
foreach($errors as $error){
$this->userMessage($error, 'warning');
}
$this->f3->reroute('/register');
}
С этой ошибкой 500 вместо того, чтобы видеть мое эхо, поэтому страница перестает загружаться полностью.
All of the required rules must pass for ...
1 ответ
Вы не можете использовать Validator
класс как массив, как вы делаете на $registerValidator[$key]->check($value)
, Объект в $registerValidator
переменная содержит цепочку правил для проверки ввода.
В вашем случае, я полагаю, что вход - это массив POST
Поэтому прежде всего вы должны использовать валидатор ключа вместо атрибута.
Однако настоящая причина, по которой вы не можете обнаружить ошибки, заключается в том, что на вашем catch
утверждение, имя класса должно быть Respect\Validation\Exceptions\NestedValidationException
как это указано в документации, а не Respect\Validation\Validator\NestedValidationException
,