控制器中使用

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

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

如下定义一个 ValidatorController, 同时使用默认验证器和自定义验证器以及我们自定义的验证规则。

<?php declare(strict_types=1);

namespace App\Http\Controller;

use Swoft\Http\Message\Request;
use Swoft\Http\Server\Annotation\Mapping\Controller;
use Swoft\Http\Server\Annotation\Mapping\RequestMapping;
use Swoft\Validator\Annotation\Mapping\Validate;

/**
 * Class ValidatorController
 *
 * @Controller()
 */
class ValidatorController
{
    /**
     * 验证TestValidator验证器中的所有已定义字段
     *
     * @RequestMapping()
     * @Validate(validator="TestValidator")
     * @param Request $request
     *
     * @return array
     */
    public function validateAll(Request $request): array
    {
        return $request->getParsedBody();
    }

    /**
     * 仅验证TestValidator验证器中的 type 字段
     *
     * @RequestMapping()
     * @Validate(validator="TestValidator",fields={"type"})
     * @param Request $request
     *
     * @return array
     */
    public function validateType(Request $request): array
    {
        return $request->getParsedBody();
    }

    /**
     * 仅验证TestValidator验证器中的 password 字段 password字段使用的是自定义的验证规则。
     *
     * @RequestMapping()
     * @Validate(validator="TestValidator",fields={"password"})
     * @param Request $request
     *
     * @return array
     */
    public function validatePassword(Request $request): array
    {
        return $request->getParsedBody();
    }

    /**
     * 使用userValidator自定义验证器
     *
     * @RequestMapping()
     * @Validate(validator="userValidator")
     * @param Request $request
     *
     * @return array
     */
    public function validateCustomer(Request $request): array
    {
        return $request->getParsedBody();

    }
}
  • $request->getParsedBody() 所有解析数据
  • $request->parsedBody('key', 'default') 指定 KEY 解析数据
  • $request->getParsedQuery() 所有解析的 Query 参数
  • $request->parsedQuery('key', 'default') 指定 KEY 解析数据(>=2.0.2)

@Validate

  • validator 指定验证器名称
  • fields 指定验证器里面验证的字段,这样可以高效的重复使用验证器
  • type 默认 bodyValidateType::GET 验证 GET 请求 query 参数
  • params 自定义验证器使用,传递给自定义验证器的参数

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

验证 GET 请求 query 参数:

use Swoft\Validator\Annotation\Mapping\ValidateType;

... ...

    /**
     * @RequestMapping()
     * @Validate(validator="TestValidator", type=ValidateType::GET)
     * @param Request $request
     *
     * @return array
     */
    public function validateType(Request $request): array
    {
        return $request->getParsedBody();
    }
/docs/2.x/zh-CN/validator/controller-validator.html
progress-bar