单个字段的多重验证

时间:2017-11-16 04:58:17

标签: laravel laravel-5 laravel-5.3

我有3个字段'account_name','billable_option' and 'billable_option_yes' 如果未填写'billable_option'则需要'billable_option_yes',如果'billable_option_yes'未填写则需要'billable_option'

如果'account_name'值为0,我想检查两个字段是不是必需的 我想结合验证required_unless:account_name,0

if($account!=0){ } not working



$account=$request->account_name;        
     if($account!=0){ //not working
                $this->validate($request,[
                'billable_option' => 'required_without:billable_option_yes',
                'billable_option_yes' =>'required_without:billable_option',
                ],$messages); 
    }
   $messages=[
            'billable_option.required_without'=>'The Billable is Required',
            'billable_option_yes.required_without'=>'The Billable optoion is Required',
       ];
      $this->validate($request,[
        ...
       'billable'=>'required_unless:account_name,0', //fourth field working fine
        ..
      ],$messages);

2 个答案:

答案 0 :(得分:0)

您可能需要查看文档中的Require if验证规则。

  

<强> required_if:anotherfield,值,...

  如果anotherfield字段等于任何值,则验证字段必须存在且不为空。

答案 1 :(得分:0)

您是否检查了if条件中使用的比较,

如果您的account_name字段是字符串,那么您就不能这样比较:

if($account != 0)
{
    ....
}

这会将字符串$account与整数0进行比较,以便条件永远不会为真。所以,你必须改变,

if($account != '0')
{
    ....
}

现在,如果帐户为0,您还希望不对billable_optionbillable_option_yes进行验证检查。

因此,您可以在单个if条件内编写验证方法,并且在if条件结束后无需添加更多验证代码。

if($account != '0'){     // if $account is string variable
        $this->validate($request,[
            'billable_option' => 'required_without:billable_option_yes',
            'billable_option_yes' =>'required_without:billable_option',
            ],
        $messages = [
            'billable_option.required_without'=>'The Billable is Required',
            'billable_option_yes.required_without'=>'The Billable option is Required',
        ]); 
}

希望你明白。