查阅代码后,答案是“不开箱即用”。但是,您可以扩展所有内容并使其工作。
这个过程,我目前没有时间完全完成(对不起!),将创建一个扩展 Validator 的类,使该功能正常工作,然后使用新的 ServiceProvider 将 Laravel 替换$app['validator']
为您自己的。
这个过程,更具体一点,是这样的:
<?php namespace MyLib\Validation;
class Validator extends \Illuminate\Validation\Validator {
// Fancy validation logic to be able to set custom messages
}
然后,您需要扩展工厂以返回您的新验证器:
<?php namespace MyLib\Validation;
class Factory extends \Illuminate\Validation\Factory {
// Change this method
/**
* Resolve a new Validator instance.
*
* @param array $data
* @param array $rules
* @param array $messages
* @return \MyLib\Validation\Validator
*/
protected function resolve($data, $rules, $messages)
{
if (is_null($this->resolver))
{
// THIS WILL NOW RETURN YOUR NEW SERVICE PROVIDER SINCE YOU'RE
// IN THE MyLib\Validation NAMESPACE
return new Validator($this->translator, $data, $rules, $messages);
}
else
{
return call_user_func($this->resolver, $this->translator, $data, $rules, $messages);
}
}
}
...最后,扩展 Validation 服务提供者,使用你的新工厂,然后用你自己的替换默认的 ValidationServiceProvider。
<?php namespace MyLib\Validation;
class ValidationServiceProvider extends \Illuminate\Validation\ServiceProvider {
/**
* Register the service provider.
*
* @return void
*/
public function register()
{
$this->registerPresenceVerifier();
$this->app['validator'] = $this->app->share(function($app)
{
// THIS WILL NOW RETURN YOUR FACTORY SINCE YOU'RE
// IN THE MyLib\Validation NAMESPACE
$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;
});
}
}
所以无论如何,这是用您自己的代码扩展验证库的一种方法。我没有解决添加您自己的消息的问题,但是如果您可以阅读核心代码并了解如何添加该功能,这将向您展示如何使其在您的应用程序中工作。
最后一点:
您可能想看看 Laravel 如何在验证规则中使用数据库“东西”处理- 虽然这可能不会影响您的应用程序(除非它变得很大!)您可能需要考虑使用某种存储库模式并在您的Validator::extend()
调用中使用它User
直接上课。没有必要,只是一个要检查的东西的注释。
祝你好运,不要害怕RTFC!