控制器中使用

如果想在控制器中使用验证器很简单,只需要是一个注解 @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 章节。