hyperf 3.1 验证器

        hyperf/validation 衍生于 illuminate/validation,我们对它进行了一些改造,但保持了验证规则的相同。在这里感谢一下 Laravel 开发组,实现了如此强大好用的验证器组件。


        1. 引入组件包

composer require hyperf/validation

        2. 添加中间件

        您需要为使用到验证器组件的 Server 在 config/autoload/middlewares.php 配置文件加上一个全局中间件 Hyperf\Validation\Middleware\ValidationMiddleware 的配置,如下为 http Server 加上对应的全局中间件的示例:

<?php
return [
    // 下面的 http 字符串对应 config/autoload/server.php 内每个 server 的 name 属性对应的值,意味着对应的中间件配置仅应用在该 Server 中
    'http' => [
        // 数组内配置您的全局中间件,顺序根据该数组的顺序
        \Hyperf\Validation\Middleware\ValidationMiddleware::class
        // 这里隐藏了其它中间件
    ],
];

        3. 添加异常处理器

        异常处理器主要对 Hyperf\Validation\ValidationException 异常进行处理,我们提供了一个 Hyperf\Validation\ValidationExceptionHandler 来进行处理,您需要手动将这个异常处理器配置到您的项目的 config/autoload/exceptions.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. 使用:表单验证类

        可以通过执行下面的命令创建一个名为 FooRequest 的表单验证类:

php bin/hyperf.php gen:request FooRequest

        表单验证类会生成于 app\Request 目录下,如果该目录不存在,运行命令时会自动创建目录。

        

        定义规则

<?php

declare(strict_types=1);

namespace App\Request;

use Hyperf\Validation\Request\FormRequest;

class FooRequest extends FormRequest
{
    /**
     * Determine if the user is authorized to make this request.
     */
    public function authorize(): bool
    {
        return true;
    }

    /**
     * Get the validation rules that apply to the request.
     */
    public function rules(): array
    {
        return [
            'name' => ['required', 'string'],
            'password' => ['required', 'min:6']
        ];
    }

    /**
     * 验证的各字段的含义
     * @return array|string[]
     */
    public function attributes(): array
    {
        return [
            'name' => '用户名',
            'password' => '密码'
        ];
    }
}


        依赖注入的方式验证

<?php

declare(strict_types=1);

namespace App\Controller;

use App\Request\FooRequest;

class IndexController extends AbstractController
{
    public function test(FooRequest $request)
    {
        // 返回验证通过的字段
        return $request->validated();
    }
}

        使用:通过表单验证对象

<?php

declare(strict_types=1);
/**
 * This file is part of Hyperf.
 *
 * @link     https://www.hyperf.io
 * @document https://hyperf.wiki
 * @contact  group@hyperf.io
 * @license  https://github.com/hyperf/hyperf/blob/master/LICENSE
 */

namespace App\Controller;

use Hyperf\Di\Annotation\Inject;
use Hyperf\HttpServer\Contract\RequestInterface;
use Hyperf\Validation\Contract\ValidatorFactoryInterface;

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

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



路由:
    Router::addRoute(['GET', 'POST', 'HEAD'], '/', 'App\Controller\IndexController@index');
    
访问:
    127.0.0.1:9501

冷暖自知一抹茶ck



冷暖自知一抹茶ck
请先登录后发表评论
  • 最新评论
  • 总共0条评论