我有同样的问题,这就是我所做的。
首先,创建一个类并将其命名为CustomValidatorServiceProvider或您想要的任何名称。在CustomValidatorServiceProvider中添加以下行。
<?php
namespace App\Providers;
use Illuminate\Support\Facades\Event;
use Illuminate\Validation\ValidationServiceProvider as ServiceProvider;
use App\Services\Validator\Factory;
class CustomValidatorServiceProvider extends ServiceProvider
{
/**
* Register the validation factory.
*
* @return void
*/
protected function registerValidationFactory()
{
$this->app->singleton('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['db']) && isset($app['validation.presence'])) {
$validator->setPresenceVerifier($app['validation.presence']);
}
return $validator;
});
}
}
如果您注意到我添加了自己的Validator\Factory并导入了它。在Validator\Factory我有以下代码。
<?php
namespace App\Services\Validator;
use Illuminate\Validation\Factory as ParentFactory;
class Factory extends ParentFactory
{
/**
* Resolve a new Validator instance.
*
* @param array $data
* @param array $rules
* @param array $messages
* @param array $customAttributes
* @return \Illuminate\Validation\Validator
*/
protected function resolve(array $data, array $rules, array $messages, array $customAttributes)
{
if (is_null($this->resolver)) {
return new Validator($this->translator, $data, $rules, $messages, $customAttributes);
}
return call_user_func($this->resolver, $this->translator, $data, $rules, $messages, $customAttributes);
}
}
在Validator\Factory所在的同一目录中,我还添加了我的自定义验证器类,它将是扩展框架验证器类的类。它包含以下代码。
<?php
namespace App\Services\Validator;
use Illuminate\Validation\Validator as ParentValidator;
use Illuminate\Support\Str;
class Validator extends ParentValidator
{
/**
* Replace all place-holders for the greater_than_equal rule.
*
* @param string $message
* @param string $attribute
* @param string $rule
* @param array $parameters
* @return string
*/
protected function replaceGreaterThanEqual($message, $attribute, $rule, $parameters)
{
$replacers[0] = str_replace('_', ' ', Str::snake($parameters[0]));
$replacers[1] = $attribute;
return str_replace([':other', ':attribute'], $replacers, $message);
}
/**
* Replace all place-holders for the after_or_equal rule.
*
* @param string $message
* @param string $attribute
* @param string $rule
* @param array $parameters
* @return string
*/
protected function replaceAfterOrEqual($message, $attribute, $rule, $parameters)
{
return $this->replaceGreaterThanEqual($message, $attribute, $rule, $parameters);
}
}
最后,我们应该在 providers 数组下添加我们在config/app.php 中创建的服务提供者。
App\Providers\CustomValidatorServiceProvider::class,
您已经可以删除或注释掉ValidationServiceProvider
Illuminate\Validation\ValidationServiceProvider::class,