php-Laravel验证:required_with_all条件始终通过
作者:互联网
按照laravel validation documentation:
required_with_all:foo,bar,… The field under validation must be present only if all of the other specified fields are present.
这是我的测试:
Route::get('/test/{param}', function($param) {
$screenRules = array(
'foo' => 'string',
'param' => 'required_with_all:foo',
);
$validator = Validator::make(array('param' => $param), $screenRules);
if($validator->fails())
{
echo '<pre>';
print_r($validator->errors());
echo '</pre>';
die('Dying now!');
}
else
{
echo 'All Good!';
die('Dying now!');
}
});
我希望因为我没有通过foo,所以此测试应该失败.但是,当我调用我的网址:mysite.com/test/mytest时,此测试通过
同样,如果您反转角色,就像这样
'param' => 'required_without_all:foo',
并传递foo作为输入
array('param' => $param, 'foo' => 'bar')
我希望既然存在foo,就不能将param作为输入.但是测试仍然通过.
在这两种情况下,我都应该看到错误.那么这是怎么回事?
我也知道我的验证功能没有错,因为我的其他验证工作正常.例如.添加如下条件:
'param' => 'required_with_all:foo|numeric',
并且确实会引发错误.param必须是一个数字.
解决方法:
我终于找到答案了.我误解了整个required_if概念.这个答案将帮助任何陷入困境的人.关键是一次又一次阅读laravel文档;)
概念
对于required_with_all,它说:仅当所有其他指定的字段都存在时,验证字段才必须存在.
例如.参数=> required_with_all:foo,bar,…
表示当foo和bar都存在而param不存在时,将发生验证错误.
我误解了它,如果参数存在,那么它也需要foo和bar.但是,正如我们刚刚看到的那样,情况恰恰相反.
另类
如果您需要像存在param一样进行验证,则必须使用foo上的required_with验证规则来存在foo,如下所示:
'param' => 'required_with:foo',
'foo' => 'required_with: param
这将确保如果foo或param出现,则其中任何一个都将存在,它们也将要求另一个也存在.
我的测试用例的说明
第一个测试用例
'param' => 'required_with_all:foo'
我通过了以下输入
array('param' => $param)
测试用例失败是因为foo没有出现在输入中,没有触发验证,因为该规则仅检查foo是否存在.因此,与其传递参数作为输入,不如传递foo作为输入,您将看到存在foo时需要param的错误.
第二个测试用例
'param' => 'required_without_all:foo',
并像这样传递输入:
array('param' => $param, 'foo' => 'bar')
此验证不起作用,因为它说只有在不存在foo时才需要param.但是,在我的输入中,我已经传递了foo.删除foo和param,您将看到以下错误:如果不存在foo,则需要param.
我真傻!
标签:laravel-validation,laravel-5-1,php 来源: https://codeday.me/bug/20191027/1943895.html