介绍

对验证的规则进行管理,验证器是规则管理器的子类,如果你仅需要对规则进行管理,可直接继承该类。

class UserRulesManager extends RuleManager
{
    protected $rule = [
        'user'    => 'required|email',
        'pass'    => 'required|lengthBetween:6,16',
        'name'    => 'required|chs|lengthBetween:2,4',
        'remark'  => 'required|alpha_dash',
        'captcha' => 'required|length:4|checkCaptcha',
    ];

    protected $scene = [
        'login'   => ['user', 'pass'],
        'captcha' => ['captcha']
    ];

    protected $customAttributes = [
        'user'    => '用户名',
        'pass'    => '密码',
        'name'    => '昵称',
        'remark'  => '备注',
        'captcha' => '验证码',
    ];

    protected $message = [
        'captcha.checkCaptcha' => '验证码错误',
        'user.email'           => '用户名必须为邮箱',
        'pass.lengthBetween'   => '密码长度错误'
    ];

    protected function sceneRegister(RuleManagerScene $scene)
    {
        return $scene->only(['user', 'pass', 'name', 'remark'])
            ->remove('remark', 'required|alpha_dash')
            ->append('remark', 'chs');
    }

    protected function sceneRegisterNeedCaptcha(RuleManagerScene $scene)
    {
        return $this->sceneRegister($scene)->appendCheckField('captcha');
    }

    public function ruleCheckCaptcha($att, $value): bool
    {
        return true;
    }
}

提示

在规则管理器中,可以使用自定义规则一节中提到的方式来扩展规则和错误消息

获取规则

可以直接调用类的静态方法get来获取规则、错误消息、属性名称

public static function get($fields = null, bool $initial = false): array
  • $fields 要获取的字段名称,如果为null,则获取所有规则
  • $initial 是否获取原始规则,默认为false,即解析后的规则
UserRulesManager::get('user');

请注意

如果想应用验证场景的规则,请实例化类后使用scene方法指定验证场景后再调用get方法

(new UserRulesManager())->scene('register')->get('user');

将返回

Array
(
    [0] => Array
        (
            [user] => Array
                (
                    [0] => required
                    [1] => email
                )

        )

    [1] => Array
        (
            [user.email] => 用户名必须为邮箱
        )

    [2] => Array
        (
            [user] => 用户名
        )

)

获取指定验证场景下所有的规则、错误消息、属性名称,可直接使用getBySceneName静态方法:

UserRulesManager::getBySceneName('register');

也可以直接调用静态方法

UserRulesManager::register();

单独获取

如果想单独的获取规则,错误消息,属性名称,你可以实例化规则管理器后使用下列方法:

  • getRules 获取规则
  • getCustomAttributes 获取属性名称
  • getMessages 获取错误消息

请注意

getRules方法受scene方法影响,不同的场景下取出的规则可能不同