Php Laravel验证:要求所有条件始终通过

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

根据:

必填\u和\u all:foo,bar,…只有当所有其他指定字段都存在时,验证中的字段才必须存在

这是我的测试:

    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个字段添加语句,效果非常好。再次感谢。