Php Laravel验证:要求所有条件始终通过
根据: 必填\u和\u all:foo,bar,…只有当所有其他指定字段都存在时,验证中的字段才必须存在 这是我的测试:Php Laravel验证:要求所有条件始终通过,php,laravel-5.1,laravel-validation,Php,Laravel 5.1,Laravel Validation,根据: 必填\u和\u all:foo,bar,…只有当所有其他指定字段都存在时,验证中的字段才必须存在 这是我的测试: Route::get('/test/{param}', function($param) { $screenRules = array( 'foo' => 'string', 'param' => 'required_with_all:foo', ); $v
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作为输入传递
'param' => 'required_with_all:foo|numeric',
我希望既然foo
存在,就不能将param
作为输入。但测试还是通过了
在这两种情况下,我都应该看到错误。这是怎么回事
我也知道我的验证函数没有错,因为我的其他验证工作正常。例如,添加如下条件:
'param' => 'required_with:foo',
'foo' => 'required_with: param
它确实会抛出一个错误,参数必须是一个数字。我终于找到了答案。我误解了整个
required\u if
概念。这个答案将帮助任何被困在这里的人。关键是反复阅读laravel文档;)
概念
对于required\u with_all
,它表示:如果所有其他指定字段都存在,则验证中的字段必须仅存在
例如,param=>required_与_all:foo、bar、…
这意味着当foo和bar都存在,并且param
不存在时,将发生验证错误
我误解了,如果param
存在,那么它也需要foo
和bar
存在。但正如我们刚才看到的,情况正好相反
可供替代的
如果您需要以的形式进行验证,如果参数存在,则foo必须存在
请使用必需的\u和对foo的验证规则,如:
'param' => 'required_with_all:foo'
这将确保如果foo
或param
,其中任何一方在场,他们也会要求另一方在场
解释我的测试用例
第一个测试用例
array('param' => $param)
array('param' => $param, 'foo' => 'bar')
我传递了以下输入
'param' => 'required_without_all:foo',
测试用例失败,因为foo不在输入中,没有触发验证,因为规则说只有当foo
存在时才检查。因此,不要将param
作为输入传递,只需将foo
作为输入传递,您将看到当出现foo
时需要param
的错误
第二个测试用例
array('param' => $param)
array('param' => $param, 'foo' => 'bar')
并像这样传递输入:
此验证不起作用,因为它说只有当foo
不存在时才需要param。然而,在我的输入中,我通过了foo。删除foo
和param
,您将看到错误,即当foo不存在时,需要param
我真傻谢谢。我做出了和你一样的错误假设,并且已经在桌子上敲打了几个小时。@Icehawg我很高兴我能帮上忙。如果可能的话,请支持我的回答。谢谢快乐编码!哦,对了。对行。对不起,当我看到你的评论时,我感到非常欣慰,我马上回到我的代码中去查看它。很抱歉现在开始投票。:)我还有两个领域,这就是为什么我要尝试必选的。将其更改为2个必填字段,并为所有3个字段添加语句,效果非常好。再次感谢。