Php 用于验证程序的Laravel自定义服务提供程序

Php 用于验证程序的Laravel自定义服务提供程序,php,validation,laravel,laravel-4,service-provider,Php,Validation,Laravel,Laravel 4,Service Provider,我想重写illumb\Validation\Validator类中的方法(isvalidable)。为此,我创建了一个类(外部照明),该类扩展了验证器,并且只覆盖isvalidable方法 我认为这会起作用,只是我不确定如何为Validator类(或者实际上是CustomLaravelValidatorclass)创建服务提供者。我以前创建过服务提供程序,但在Validator serviceprovider内部似乎有很多事情要做(light\Validation\ValidationServi

我想重写
illumb\Validation\Validator
类中的方法(
isvalidable
)。为此,我创建了一个类(外部照明),该类扩展了验证器,并且只覆盖
isvalidable
方法

我认为这会起作用,只是我不确定如何为Validator类(或者实际上是
CustomLaravelValidator
class)创建服务提供者。我以前创建过服务提供程序,但在Validator serviceprovider内部似乎有很多事情要做(
light\Validation\ValidationServiceProvider
)。因此,我不知道这个类的定制服务提供者应该是什么样子

这是我的CustomLaravelValidator类:

<?php namespace API\Extensions\Core;

use Illuminate\Validation\Validator;

class CustomLaravelValidator extends Validator {

    /**
     * Determine if the attribute is validatable.
     *
     * @param  string  $rule
     * @param  string  $attribute
     * @param  mixed   $value
     * @return bool
     */
    protected function isValidatable($rule, $attribute, $value)
    {
        // Validate integers on empty strings as well
        if($rule == 'IntStrict')
        {
            return true;
        }
        return $this->presentOrRuleIsImplicit($rule, $attribute, $value) &&
        $this->passesOptionalCheck($attribute);
    }

}

您的服务提供商不需要模仿本机验证器服务提供商。您只需要使用验证器工厂中的
解析器
方法注册自定义验证器

use API\Extensions\Core\CustomLaravelValidator;

class CustomValidationServiceProvider extends ServiceProvider {

    public function boot()
    {
        $this->app['validator']
             ->resolver(function($translator, $data, $rules, $messages)
        {
            return new CustomLaravelValidator(
                $translator, 
                $data, 
                $rules, 
                $messages
            );
        });
    }
}

就这样

对于几年后在这里闲逛的人:当前的方法是使用
Validator::extend
扩展验证器外观。看见
use API\Extensions\Core\CustomLaravelValidator;

class CustomValidationServiceProvider extends ServiceProvider {

    public function boot()
    {
        $this->app['validator']
             ->resolver(function($translator, $data, $rules, $messages)
        {
            return new CustomLaravelValidator(
                $translator, 
                $data, 
                $rules, 
                $messages
            );
        });
    }
}