【问题标题】:required_without not working with other rulesrequired_without 不使用其他规则
【发布时间】:2018-02-02 20:17:17
【问题描述】:
'person.mail' =>'required_without:person.phone|sometimes|email|unique:persons,mail',

'person.phone' => 'required_without:person.mail|sometimes|regex:/[0-9]/|size:10|unique:persons,phone'

我需要验证电话和邮件,其中一项是强制性的

当邮件为空而电话不为空时,验证在电子邮件规则下失败,这是双向的,当邮件存在且电话为空时,在正则表达式规则下验证失败

如果值为 null,我如何停止验证?

【问题讨论】:

    标签: laravel laravel-5 laravel-validation


    【解决方案1】:

    作为laravel docs 状态:

    在某些情况下,您可能希望针对 仅当该字段存在于输入数组中时。要快速 完成此操作,将有时规则添加到您的规则列表中。

    我感觉你确实同时发布了person[email]person[phone],在这种情况下sometimes 将指示验证继续进行,因为这些值将是空字符串(或者可能是null)而不是不存在。除了检查 key x 是否存在之外,您可以有条件地为其他断言添加规则,方法是创建自己的验证器,并使用其sometimes() 方法创建自己的断言:

    $v = Validator::make($data, [
        'person.email' => 'email|unique:persons,mail',
        'person.phone' => 'regex:/[0-9]/|size:10|unique:persons,phone',
    ]);
    
    $v->sometimes('person.email', 'required', function($input) {
        return ! $input->get('person.phone');
    });
    
    $v->sometimes('person.phone', 'required', function($input) {
        return ! $input->get('person.email');
    });
    

    这里的区别在于这些字段默认情况下不是必需的。例如,person.phone 可能为空,或者必须与您的正则表达式匹配。如果$input->get('person.email') 返回一个falsy 值,那么毕竟person.phone 是必需的。

    作为说明,我认为您的正则表达式是错误的。只要person.phone 中的任何字符是数字,它就会通过。我认为您正在寻找这样的东西:

    'person.phone' => 'regex:/^[0-9]{10}$/|unique:persons,phone'
    

    【讨论】:

    • 是的,我在 laracasts 论坛的某个地方读到,有时规则将空字符串和 null 评估为 false,谢谢您的回答
    【解决方案2】:

    我是这样解决的,这不是最好的方法,但效果很好 验证后我添加了

    if(empty($request->all()['person']['mail']) && empty($request->all()['person']['phone'])){
            $validator->errors()->add('person.mail', 'Mail or phone required');
            $validator->errors()->add('person.phone', 'Mail or phone required');
            return redirect("admin/people-create")->withInput()->withErrors($validator);
        }
    

    【讨论】:

      猜你喜欢
      • 2021-12-09
      • 2021-03-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-13
      相关资源
      最近更新 更多