Laravel 中自定义验证规则的别名?
Alias for custom validation rule in Laravel?
如果我有一个自定义规则 class (MyCustomRule
) 实现 Illuminate\Contracts\Validation\Rule
,有没有一种快速的方法可以为该规则注册一个别名,以便我可以将其称为细绳?例如
public function rules()
{
return [
'email' => 'required|my_custom_rule'
];
}
我不想在 AppServiceProvider
中重复自己。
在我的自定义规则中,我添加了一个 __toString()
方法,其中 returns 是别名。我还允许将可选的 $parameters
和 $validator
传递给 passes
方法。
使用 Illuminate\Contracts\Validation\Rule;
class MyCustomRule implements Rule
{
protected $alias = 'my_custom_rule';
public function __toString()
{
return $this->alias;
}
public function passes($attribute, $value, $parameters = [], $validator = null)
{
// put your validation logic here
return true;
}
public function message()
{
return 'Please enter a valid email address';
}
}
然后我在 AppServiceProvider 中创建了一个方法来一次性注册所有规则及其别名。
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
protected $rules = [
\App\Rules\MyCustomRule::class,
// ... other rules here
];
public function boot()
{
$this->registerValidationRules();
// ... do other stuff here
}
private function registerValidationRules()
{
foreach($this->rules as $class ) {
$alias = (new $class)->__toString();
if ($alias) {
Validator::extend($alias, $class .'@passes');
}
}
}
}
如果我有一个自定义规则 class (MyCustomRule
) 实现 Illuminate\Contracts\Validation\Rule
,有没有一种快速的方法可以为该规则注册一个别名,以便我可以将其称为细绳?例如
public function rules()
{
return [
'email' => 'required|my_custom_rule'
];
}
我不想在 AppServiceProvider
中重复自己。
在我的自定义规则中,我添加了一个 __toString()
方法,其中 returns 是别名。我还允许将可选的 $parameters
和 $validator
传递给 passes
方法。
使用 Illuminate\Contracts\Validation\Rule;
class MyCustomRule implements Rule
{
protected $alias = 'my_custom_rule';
public function __toString()
{
return $this->alias;
}
public function passes($attribute, $value, $parameters = [], $validator = null)
{
// put your validation logic here
return true;
}
public function message()
{
return 'Please enter a valid email address';
}
}
然后我在 AppServiceProvider 中创建了一个方法来一次性注册所有规则及其别名。
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
protected $rules = [
\App\Rules\MyCustomRule::class,
// ... other rules here
];
public function boot()
{
$this->registerValidationRules();
// ... do other stuff here
}
private function registerValidationRules()
{
foreach($this->rules as $class ) {
$alias = (new $class)->__toString();
if ($alias) {
Validator::extend($alias, $class .'@passes');
}
}
}
}