我将Illuminate\Validation\Factory、Illuminate\Validation\ValidationServiceProvider 和Illuminate\Validation\Validator 分别分类为(例如)MyFactory、MyValidationServiceProvider 和MyValidator。
MyFactory.php 看起来像这样:
<?php
use Illuminate\Validation\Factory;
class MyFactory extends Factory {
/**
* {@inheritDoc}
*
* @param array $data
* @param array $rules
* @param array $messages
* @param array $customAttributes
* @return MyValidator
*/
protected function resolve(array $data, array $rules, array $messages, array $customAttributes)
{
if (is_null($this->resolver))
{
return new MyValidator($this->translator, $data, $rules, $messages, $customAttributes);
}
else
{
return call_user_func($this->resolver, $this->translator, $data, $rules, $messages, $customAttributes);
}
}
}
MyValidationServiceProvider.php 看起来像这样:
<?php
use Illuminate\Validation\ValidationServiceProvider;
class MyValidationServiceProvider extends ValidationServiceProvider {
/**
* {@inheritDoc}
*
* @return void
*/
public function register()
{
$this->registerPresenceVerifier();
$this->app->bindShared('validator', function($app)
{
$validator = new MyFactory($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;
});
}
}
MyValidator.php 看起来像这样:
<?php
namespace MuThetaTau\MuThetaTau\Validation;
use Illuminate\Validation\Validator;
class MyValidator extends Validator {
// custom validation logic
}
最后,我必须更新 app.php 中的服务提供者以指向 MyValidationServiceProvider' instead ofIlluminate\Validation\ValidationServiceProvider`。
外观Validator 现在指向MyValidator。您甚至可以创建多个工厂,向MyValidationServiceProvider 添加(和调用)方法以注册其他验证器类以将新工厂映射到新的 IoC 绑定,创建新的外观类,并在应用程序的外观中添加条目.php 为您制作的每个验证器提供不同的外观。