0

我正在尝试使用Respect\Validation\Validator开源 PHP 类来捕获错误。我用他们的例子来创建一个检查数组。尽管这似乎可以正常工作,但我随后尝试捕获任何错误消息,以便将其显示给用户。我没有看到任何方法可以作为一个完整的数组(检查所有内容,将所有消息存储在一个数组中)。因此,我尝试循环使用 Validator 中的检查方法。

这是使用 F3(无脂肪)框架的类方法内部。

我最终得到以下错误:

不能将 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 错误,而不是看到我的 Echo,页面完全停止加载。

所有必需的规则必须通过...

4

1 回答 1

1

您不能Validator像在 on 上那样真正将类用作数组$registerValidator[$key]->check($value)。变量中的对象包含验证输入$registerValidator的规则链。

在你的情况下,我相信输入是来自的数组 POST,所以首先你应该使用Key验证器而不是Attribute

但是,您无法捕获错误的真正原因是您的catch语句中有错字,类名应该Respect\Validation\Exceptions\NestedValidationException像文档中所述,而不是Respect\Validation\Validator\NestedValidationException.

于 2017-02-16T16:13:10.857 回答