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은?