Laravel中自定义验证规则的别名?

Laravel中自定义验证规则的别名?,laravel,laravel-6,Laravel,Laravel 6,如果我有一个自定义规则类(MyCustomRule)实现illighted\Contracts\Validation\rule,是否有一种快速的方法来注册该规则的别名,以便我可以将其作为字符串调用?e、 g public function rules() { return [ 'email' => 'required|my_custom_rule' ]; } 我不想在自定义规则的AppServiceProvider中重复我自己,我添加了一个\u toStr

如果我有一个自定义规则类(
MyCustomRule
)实现
illighted\Contracts\Validation\rule
,是否有一种快速的方法来注册该规则的别名,以便我可以将其作为字符串调用?e、 g

public function rules()
{
    return [
        'email' => 'required|my_custom_rule'
    ];
}

我不想在自定义规则的
AppServiceProvider

中重复我自己,我添加了一个
\u toString()
方法,该方法返回别名。我还允许将可选的
$parameters
$validator
传递给
passes
方法。 使用照明\合同\验证\规则

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');
            }
        }
    }
}