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,

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