【问题标题】:Force Validation error in Laravel 5.1Laravel 5.1 中的强制验证错误
【发布时间】:2015-11-09 05:01:24
【问题描述】:

在 Laravel 5.1 中使用 Validator 类时有没有办法强制出错?

目前,我已经完成了调用$validator = Validator::make($request->all(), $rules) 的传统方式,效果很好。另外,我正在尝试进行另一次验证(手动验证)并将其推送到$validator,但是当我调用$validator->fails() 时我无法获得true

即使使用$validator->errors()->add('field','message') 我也无法强制。还有其他方法吗?

【问题讨论】:

    标签: php validation laravel laravel-5


    【解决方案1】:

    我也遇到了同样的问题
    将错误添加到 Validator 不会使其失败,所以你需要为它设置一个陷阱来强制它,也许是必需的甚至不存在的输入...
    但这会给用户带来一个令人困惑的错误(例如:需要 unreal_input),
    您可以轻松更改消息以解释实际导致您失败的原因...

    $req = Request::all();
    $rules = [/*...*/];
    
    if(/*something's wrong*/){
        $rules['unreal_input'] = 'required'; // a confusing error in your errors list...
        $messages['unreal_input.required'] = '/* explain the real problem in here*/';
    }
    
    $validator = Validator::make($req, $rules,$messages);
    
    if ($validator->fails()) return redirect()->back()->withErrors($validator)->withInput();
    

    所以在上面的代码中,您手动检查了是否有问题,然后您为Validator 设置了一个陷阱,然后您将消息更改为真正的问题所在。

    注意: 我建议您使用随机值而不是 unreal_input 之类的值,因为如果您这样做,用户可能(?)猜测输入的名称,并轻松使用 F12 他/她会通过验证并向您提供一些无效数据

    【讨论】:

      【解决方案2】:

      为了使验证失败,您需要定义一个不会被满足的验证规则。最简单的方法是要求一些不存在的字段。

      这样就可以了:

      $rules['some_non_existent_field'] = 'required';
      $validator = Validator::make($request->all(), $rules);
      dd($validator->fails());
      

      【讨论】:

        猜你喜欢
        • 2016-08-17
        • 2017-01-28
        • 2018-08-15
        • 2016-05-22
        • 2018-10-29
        • 2015-11-11
        • 2017-06-30
        • 1970-01-01
        • 2012-01-03
        相关资源
        最近更新 更多