Laravel验证延伸不起火

Sam*_*son 1 php validation laravel

我不认为我的验证器扩展是有效的,但我无法理解为什么.

服务提供者.

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()
    {
    }

}
Run Code Online (Sandbox Code Playgroud)

我知道服务提供商的启动正在激活,因为如果我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;
    }
}
Run Code Online (Sandbox Code Playgroud)

我知道请求正确验证,因为如果我将规则更改为'pin' => 'required'并且没有放入put,我会失败.

为什么我的自定义验证规则不起作用?

Sam*_*son 10

我在Laravel Validation文档页面的最底部找到了我的解决方案:(https://laravel.com/docs/5.4/validation)

要使规则在属性为空时运行,规则必须暗示该属性是必需的.要创建这样的"隐式"扩展,请使用Validator :: extendImplicit()方法:

通过改变方法extendextendImplicit,我的问题得到解决.

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()
    {
    }

}
Run Code Online (Sandbox Code Playgroud)