Respect\Validation\Validator - 在捕获错误时使用数组
Respect\Validation\Validator - using an array while catching errors
我正在尝试使用 Respect\Validation\Validator 开源 PHP class 捕获错误。我用他们的例子创建了一组支票。虽然这似乎工作正常,但我随后尝试捕获任何错误消息,以便我可以将其显示给用户。我没有看到作为一个完整数组这样做的方法(检查所有内容,将所有消息存储在一个数组中)。因此,我尝试使用 Validator 中的检查方法循环。
这是 class 方法的内部,使用 F3(Fat Free)框架。
我最终遇到以下错误:
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');
}
}
我也曾尝试使用在他们的文档中找到的断言方法,但是利用下面的更改,我在 500 服务器内部错误中得到了一个不同的错误,而不是看到我的 echo:
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,因此页面完全停止加载。
All of the required rules must pass for ...
您不能真正将 Validator
class 用作数组,就像您在 $registerValidator[$key]->check($value)
上所做的那样。 $registerValidator
变量中的对象包含验证 输入 .
的规则链
在你的情况下,我相信 input 是来自 POST
的数组,所以首先你应该使用 Key validator instead of Attribute.
然而,您无法捕获错误的真正原因是因为您的 catch
语句中有错字,class 名称应该是 Respect\Validation\Exceptions\NestedValidationException
,如文档中所述, 不是 Respect\Validation\Validator\NestedValidationException
.
我正在尝试使用 Respect\Validation\Validator 开源 PHP class 捕获错误。我用他们的例子创建了一组支票。虽然这似乎工作正常,但我随后尝试捕获任何错误消息,以便我可以将其显示给用户。我没有看到作为一个完整数组这样做的方法(检查所有内容,将所有消息存储在一个数组中)。因此,我尝试使用 Validator 中的检查方法循环。
这是 class 方法的内部,使用 F3(Fat Free)框架。
我最终遇到以下错误:
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');
}
}
我也曾尝试使用在他们的文档中找到的断言方法,但是利用下面的更改,我在 500 服务器内部错误中得到了一个不同的错误,而不是看到我的 echo:
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,因此页面完全停止加载。
All of the required rules must pass for ...
您不能真正将 Validator
class 用作数组,就像您在 $registerValidator[$key]->check($value)
上所做的那样。 $registerValidator
变量中的对象包含验证 输入 .
在你的情况下,我相信 input 是来自 POST
的数组,所以首先你应该使用 Key validator instead of Attribute.
然而,您无法捕获错误的真正原因是因为您的 catch
语句中有错字,class 名称应该是 Respect\Validation\Exceptions\NestedValidationException
,如文档中所述, 不是 Respect\Validation\Validator\NestedValidationException
.