2014-08-28 4 views
2

Illuminate\Validation\Validator 클래스의 메서드 (isValidatable)를 재정의하고 싶습니다. 나는 Validator를 확장하고 isValidatable 메서드를 오버라이드하는 클래스 (Illuminate 외부)를 생성함으로써 이것을 수행했다.유효성 검사기 용 Laravel 맞춤형 서비스 공급자

Validator 클래스 (또는 실제로는 CustomLaravelValidator 클래스)에 대한 서비스 공급자를 만드는 방법을 모르겠다는 것을 제외하면이 방법이 효과가 있다고 생각합니다. 전에 서비스 제공 업체를 만들었지 만 Validator serviceprovider (Illuminate\Validation\ValidationServiceProvider) 내부에서 많은 일이 벌어진 것 같습니다. 따라서이 클래스의 사용자 정의 서비스 공급자가 어떻게 생겼는지에 대한 단서가 없습니다.

이 내 CustomLaravelValidator 클래스입니다 :

<?php namespace Illuminate\Validation; 

use Illuminate\Support\ServiceProvider; 

class ValidationServiceProvider extends ServiceProvider { 

    /** 
    * Indicates if loading of the provider is deferred. 
    * 
    * @var bool 
    */ 
    protected $defer = true; 

    /** 
    * Register the service provider. 
    * 
    * @return void 
    */ 
    public function register() 
    { 
     $this->registerPresenceVerifier(); 

     $this->app->bindShared('validator', function($app) 
     { 
      $validator = new Factory($app['translator'], $app); 

      // The validation presence verifier is responsible for determining the existence 
      // of values in a given data collection, typically a relational database or 
      // other persistent data stores. And it is used to check for uniqueness. 
      if (isset($app['validation.presence'])) 
      { 
       $validator->setPresenceVerifier($app['validation.presence']); 
      } 

      return $validator; 
     }); 
    } 

    /** 
    * Register the database presence verifier. 
    * 
    * @return void 
    */ 
    protected function registerPresenceVerifier() 
    { 
     $this->app->bindShared('validation.presence', function($app) 
     { 
      return new DatabasePresenceVerifier($app['db']); 
     }); 
    } 

    /** 
    * Get the services provided by the provider. 
    * 
    * @return array 
    */ 
    public function provides() 
    { 
     return array('validator', 'validation.presence'); 
    } 

} 

사람이 어떻게 내 사용자 지정 serviceprovider 같이해야 말해 줄 수 :

<?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); 
    } 

} 

이 Laravel에서 기본 ValidationServiceProvider은?

답변

5

서비스 제공 업체는 기본 Validator 서비스 제공 업체를 모방 할 필요가 없습니다. 유효성 검사기 팩토리에서 resolver 메서드를 사용하여 사용자 정의 유효성 검사기를 등록하면됩니다. 그것 뿐이다

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 
      ); 
     }); 
    } 
} 

...

관련 문제