【发布时间】:2016-11-28 17:16:56
【问题描述】:
我正在尝试使用服务提供者的方式创建我自己的自定义 laravel 自定义验证规则。
我想出了以下存储在app/Services/CustomValidator.php中的内容
<?php
namespace App\Services;
class CustomValidator extends \Illuminate\Validation\Validator {
public function __construct($translator, $data, $rules, $messages = array(), $customAttributes = array())
{
parent::__construct($translator, $data, $rules, $messages, $customAttributes);
$this->setCustomMessages([
'not_empty_string'=> 'The field must not be empty'
]);
}
public function validateNotEmptyString($attribute, $value, $parameters)
{
return (bool) preg_match( '/""/', $value );
}
}
?>
我的提供者存储在提供者文件夹中
<?php
namespace App\Providers;
use Validator;
use Illuminate\Support\ServiceProvider;
use App\Services\CustomValidator;
class CustomValidationServiceProvider extends ServiceProvider
{
/**
* Bootstrap the application services.
*
* @return void
*/
public function boot()
{
Validator::resolver(function($translator, $data, $rules, $messages)
{
return new CustomValidator($translator, $data, $rules, $messages);
});
}
/**
* Register the application services.
*
* @return void
*/
public function register()
{
//
}
}
我已将提供程序添加到我的 config/app.php
'providers' => [
/*
* Laravel Framework Service Providers...
*/
Illuminate\Auth\AuthServiceProvider::class,
Illuminate\Broadcasting\BroadcastServiceProvider::class,
Illuminate\Bus\BusServiceProvider::class,
Illuminate\Cache\CacheServiceProvider::class,
Illuminate\Foundation\Providers\ConsoleSupportServiceProvider::class,
Illuminate\Cookie\CookieServiceProvider::class,
Illuminate\Database\DatabaseServiceProvider::class,
Illuminate\Encryption\EncryptionServiceProvider::class,
Illuminate\Filesystem\FilesystemServiceProvider::class,
Illuminate\Foundation\Providers\FoundationServiceProvider::class,
Illuminate\Hashing\HashServiceProvider::class,
Illuminate\Mail\MailServiceProvider::class,
Illuminate\Pagination\PaginationServiceProvider::class,
Illuminate\Pipeline\PipelineServiceProvider::class,
Illuminate\Queue\QueueServiceProvider::class,
Illuminate\Redis\RedisServiceProvider::class,
Illuminate\Auth\Passwords\PasswordResetServiceProvider::class,
Illuminate\Session\SessionServiceProvider::class,
Illuminate\Translation\TranslationServiceProvider::class,
Illuminate\Validation\ValidationServiceProvider::class,
Illuminate\View\ViewServiceProvider::class,
/*
* Application Service Providers...
*/
App\Providers\AppServiceProvider::class,
App\Providers\AuthServiceProvider::class,
App\Providers\EventServiceProvider::class,
App\Providers\RouteServiceProvider::class,
Laravel\Spark\Providers\SparkServiceProvider::class,
App\Providers\SparkServiceProvider::class,
Laravel\Cashier\CashierServiceProvider::class,
//custom classes
Felixkiss\UniqueWithValidator\UniqueWithValidatorServiceProvider::class,
App\Providers\CustomValidationServiceProvider::class
],
我添加的 Provider 似乎与 Felixkiss Provider 冲突,因为每当我尝试验证类似
private $rules = [
'name' => 'required|unique_with:tests,suite_id',
'description' => 'not_empty_string|required',
'expected_result' => 'not_empty_string|required',
'suite_id' => 'required',
'project_id' => 'required',
];
我想出了以下错误,这实际上是其他提供程序的一种方法。我不确定这里有什么问题,因为我似乎已经按照书本做了所有事情。
【问题讨论】:
-
谢谢,检查一下。希望这有助于解决它。
标签: php laravel laravel-5 laravel-5.2