Respect\Validation\Validator - использование массива при отлове ошибок

Я пытаюсь отловить ошибки, используя класс PHP с открытым исходным кодом Respect\Validation\Validator. Я использовал их пример для создания массива проверок. Хотя это, кажется, работает нормально, затем я попытался перехватить любые сообщения об ошибках, чтобы отобразить их пользователю. Я не видел способа сделать это как полный массив (проверить все, сохранить все сообщения в массиве). Поэтому вместо этого я попытался выполнить цикл, используя метод проверки в Валидаторе.

Это внутри метода класса, использующего F3 (Fat Free) Framework.

Я получаю следующую ошибку:

Невозможно использовать объект типа Respect\Validation\Validator в качестве массива

Код ниже. Как правильно выполнить эту задачу, используя здесь массивы? Спасибо за помощь!

$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 вместо того, чтобы видеть мое эхо, страница полностью перестает загружаться.

Все необходимые правила должны пройти для...


person Shackrock    schedule 15.02.2017    source источник


Ответы (1)


Вы не можете использовать класс Validator в качестве массива, как вы делаете в $registerValidator[$key]->check($value). Объект в переменной $registerValidator содержит цепочку правил для проверки ввода.

В вашем случае я считаю, что ввод — это массив, исходящий из POST, поэтому, прежде всего, вы должны использовать Ключ валидатора вместо Атрибута< /а>.

Однако настоящая причина, по которой вы не можете отловить ошибки, заключается в том, что у вас есть опечатка в вашем операторе catch, имя класса должно быть Respect\Validation\Exceptions\NestedValidationException, как указано в документации, а не Respect\Validation\Validator\NestedValidationException.

person henriquemoody    schedule 16.02.2017