3.7 验证器

与laravel的表单验证基本相同

1. 安装composer类库

composer require hyperf/validation

2. 设置表单验证的中间件:config/autoload/middlewares.php

<?php

return [
    'http' => [
        \Hyperf\Validation\Middleware\ValidationMiddleware::class
    ],
];

3. 添加表单验证出错的异常处理

<?php

return [
    'handler' => [
        'http' => [
            // 验证器的异常处理
            Hyperf\Validation\ValidationExceptionHandler::class,

            Hyperf\HttpServer\Exception\Handler\HttpExceptionHandler::class,
            App\Exception\Handler\AppExceptionHandler::class,
        ],
    ],
];

4. 创建验证器语言文件

php bin/hyperf.php vendor:publish hyperf/translation
php bin/hyperf.php vendor:publish hyperf/validation

5. 使用:表单验证类

php bin/hyperf.php gen:request CreateUserRequest
  • 定义规则
<?php
/**
 * 表单的验证类
 */
namespace App\Request;

use Hyperf\Validation\Request\FormRequest;

class CreateUserRequest extends FormRequest
{
    /**
     * 是否验证完成后允许放行
     * @return bool
     */
    public function authorize(): bool
    {
        return true;
    }

    /**
     * 验证规则
     * @return array|\string[][]
     */
    public function rules(): array
    {
        return [
            'name' => ['required', 'string'],
            'password' => ['required', 'min:6']
        ];
    }

    /**
     * 验证的各字段的含义
     * @return array|string[]
     */
    public function attributes(): array
    {
        return [
            'name' => '用户名',
            'password' => '密码'
        ];
    }
}
  • 依赖注入的方式验证
<?php
/**
 * 控制器
 */
namespace App\Controller;

use App\Request\CreateUserRequest;

class IndexController extends AbstractController
{
    public function index(CreateUserRequest $request)
    {
        // 返回验证通过的字段
        return $request->validated();
    }
}
  • 使用:通过表单验证对象
<?php
namespace App\Controller;

class IndexController extends AbstractController
{
    /**
     * @\Hyperf\Di\Annotation\Inject()
     * @var \Hyperf\Validation\Contract\ValidatorFactoryInterface
     */
    protected $validationFactory;

    public function index()
    {
        // 表演的验证规则
        $validator = $this->validationFactory->make(
            $this->request->all(),
            [
                'name' => ['required', 'string'],
                'password' => ['required', 'min:6'],
            ]
        );
        // 判断是否有出错
        if ($validator->fails()){
            // 错误信息
            return [
                'error' => $validator->errors()->first()
            ];
        }

        // 返回验证通过的字段
        return $validator->validated();
    }
}

注:自定义验证属性

文档更新时间: 2021-09-26 16:03   作者:赵豪