• 控制器中使用
    • @Validate

    控制器中使用

    如果想在控制器中使用验证器很简单,只需要是一个注解 @Validate 就行

    • 一个 action 可以定义多个 @Validate 使用多个验证器
    • 多个验证器按照配置顺序验证

    如下定义一个 action, 同时使用默认验证器和自定义验证器

    1. use Swoft\Http\Message\Request;
    2. use Swoft\Http\Server\Annotation\Mapping\Controller;
    3. use Swoft\Http\Server\Annotation\Mapping\RequestMapping;
    4. use Swoft\Validator\Annotation\Mapping\Validate;
    5. use App\Validator\TestValidator;
    6. /**
    7. * Class TestController
    8. *
    9. * @since 2.0
    10. *
    11. * @Controller(prefix="test")
    12. */
    13. class TestController
    14. {
    15. /**
    16. * @RequestMapping(route="validator")
    17. *
    18. * @Validate(validator=TestValidator::class, fields={"name", "type"})
    19. * @Validate(validator="userValidator")
    20. *
    21. * @param Request $request
    22. *
    23. * @return array
    24. */
    25. public function validator(Request $request): array
    26. {
    27. $data = $request->getParsedBody();
    28. $key = ;
    29. return $data;
    30. }
    31. }
    • $request->getParsedBody() 所有解析数据
    • $request->parsedBody('key', 'default') 指定 KEY 解析数据

    @Validate

    • validator 指定验证器名称
    • fields 指定验证器里面验证的字段,这样可以高效的重复使用验证器
    • params 自定义验证器使用,传递给自定义验证器的参数

    注意 $request->getParsedBody() 获取的请求数据,是已经通过验证器修改的数据。验证器可以支持表单、请求 body 数据验证,但是 body 验证需要定义对应的数据解析器,框架默认提供 JSON/XML 类型数据解析器,详细介绍,请参考 Http Server 章节。