【问题标题】:Laravel validation - required only when two conditions are trueLaravel 验证 - 仅当两个条件为真时才需要
【发布时间】:2020-12-25 18:52:55
【问题描述】:

我希望 purchaser_first_namepurchaser_last_name 仅在请求中的 gift 输入值为 true 且已验证输入的值为 false 时才需要。

到目前为止我所尝试的:

  public function rules()
    {        
        return [
            'gift' => 'required',
             'authenticated'=>required,
             'purchaser_first_name' => 'required_if:gift,true,required_if:authenticated,false',
             'purchaser_last_name' => 'required_if:gift,true,required_if:authenticated,false',

        ];
    }

这种方法结果是使用 OR 运算符而不是我想要 AND 运算符。

【问题讨论】:

  • 你没有在那里应用两个required_ifs,你只使用一个......你必须使用|来区分你正在使用另一个required_if接受一个变量参数数量
  • 这解决了一半的问题,因为还有其他的场景。例如,当身份验证为真时,不应应用该规则。您建议的方式即使在身份验证为假的情况下验证器也会触发
  • 我不是建议你做任何事情,我是在修复你对规则语法的错误使用,祝你好运
  • @PetroBianka 你检查我的解决方案了吗?还是我应该删除它?
  • @mare96 我刚刚将其标记为已接受的答案。

标签: php laravel laravel-validation


【解决方案1】:

你可以这样试试:

'purchaser_first_name' => Rule::requiredIf(function () use ($request) {
    return $request->input('gift') && !$request->input('authenticated');
}),

在函数中,你可以设置你的逻辑。我不确定你真正需要什么,但它是一个很好的开始。

另外,请查看docs 了解更多信息。

【讨论】:

  • 我只需要使用 request() 辅助方法而不是 $request 来使其工作。
【解决方案2】:

尝试更改您的验证码如下:

return [
    'gift' => 'required',
    'authenticated'=>'required',
    'purchaser_first_name' => 'required_if:gift,true|required_if:authenticated,false',
    'purchaser_last_name' => 'required_if:gift,true|required_if:authenticated,false',
];

【讨论】:

  • 这解决了一半的问题,因为还有其他的场景。例如,当身份验证为真时,不应应用该规则。您建议的方式即使在身份验证为假的情况下,验证器也会触发。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-09-16
  • 2017-11-19
  • 1970-01-01
  • 2021-04-18
  • 2018-05-29
  • 1970-01-01
  • 2013-05-20
相关资源
最近更新 更多