编程语言
首页 > 编程语言> > php-Laravel验证:required_with_all条件始终通过

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