• 自定义验证器
    • 声明验证器

    自定义验证器

    常见的业务默认验证器就能解决,但是有些业务默认验证器是没法验证,此时就需要用户根据自己业务需求,定义满足自己业务的验证器。

    声明验证器

    声明验证器很简单

    • 定一个类实现 Swoft\Validator\Contract\ValidatorInterface 接口
    • 实现 validate 方法,里面可以定义自己的业务验证器逻辑
    • 使用 @Validator 注解标记这是一个验证器,此注解使用和功能和之前介绍完全一样

    如下定义了一个验证器,验证 start 开始时间不能大于 end 结束时间

    1. use Swoft\Validator\Annotation\Mapping\Validator;
    2. use Swoft\Validator\Contract\ValidatorInterface;
    3. use Swoft\Validator\Exception\ValidatorException;
    4. /**
    5. * Class UserValidator
    6. *
    7. * @since 2.0
    8. *
    9. * @Validator(name="userValidator")
    10. */
    11. class UserValidator implements ValidatorInterface
    12. {
    13. /**
    14. * @param array $data
    15. * @param array $params
    16. *
    17. * @return bool
    18. * @throws ValidatorException
    19. */
    20. public function validate(array &$data, array $params): bool
    21. {
    22. $start = $data['start'];
    23. $end = $data['end'];
    24. if ($start > $end) {
    25. throw new ValidatorException('开始不能大于结束时间');
    26. }
    27. return true;
    28. }
    29. }

    验证方法详细介绍

    1. public function validate(array &$data, array $params): bool
    • $data 用户输入参数,通过对于的解析器,已解析成数组
    • $params 传递给验证器的参数,后续章节详细介绍

    验证成返回 true , 如果验证失败,抛出 Swoft\Validator\Exception\ValidatorException 异常,其它由框架处理。如果验证器里面需要修改参数值,可以直接修改,修改后获取值的地方会得到新的值。