【问题标题】: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());