我认为我的验证器扩展无效,但我无法理解为什么。
服务提供商。
class AppServiceProvider extends ServiceProvider
{
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
Validator::extend('fail', function ($attribute, $value, $parameters, $validator) {
return false;
});
}
/**
* Register any application services.
*
* @return void
*/
public function register()
{
}
}
我知道服务提供程序的启动正在触发,因为如果在引导方法中我dd();
,我会得到输出。如果我在扩展闭包函数中添加dd();
,我就不会得到任何输出。
请求
class SaveOrder extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
$rules = [
'customer_id' => 'in:' . Customer::getImplodedCurrentTeamKeys(),
'pin' => 'fail'
];
return $rules;
}
}
我知道请求正确验证,因为如果我将规则更改为'pin' => 'required'
并且没有放弃,我会失败。
为什么我的自定义验证规则不起作用?
答案 0 :(得分:9)
我在Laravel Validation文档页面的最底部找到了我的解决方案:(https://laravel.com/docs/5.4/validation)
要使规则在属性为空时运行,规则必须暗示该属性是必需的。创造这样一个隐含的"扩展,使用Validator :: extendImplicit()方法:
通过将方法从extend
更改为extendImplicit
,我的问题就解决了。
class AppServiceProvider extends ServiceProvider
{
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
Validator::extendImplicit('fail', function ($attribute, $value, $parameters, $validator) {
return false;
});
}
/**
* Register any application services.
*
* @return void
*/
public function register()
{
}
}