Hyperf 1.1 昨天正式发布了,这次是一个相对大的版本,更新了很多内容,但主要是发布了 验证器 这一模块。所以基于验证又变得非常方便了。今天就来体验下验证器的使用。

安装

composer require hyperf/validation

添加中间件

config\autoload\middlewares.php 文件中添加验证中间件

<?php

declare(strict_types=1);

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

添加异常处理器

config/autoload/exceptions.php 中添加如下代码:

<?php
use Hyperf\Validation\ValidationExceptionHandler;

return [
    'handler' => [
        // 这里对应您当前的 Server 名称
        'http' => [
            ValidationExceptionHandler::class,
        ],
    ],
];

发布验证器语言文件

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

使用

使用也很简单,可以基于闵玲红快速生成验证代码。

php bin/hyperf.php gen:request FooRequest

以上命令将会在 app\Request 文件夹中生成 FooRequest.php 文件。(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 [

        ];
    }
}

我们的验证规则将会在 rules 中编写,实例代码如下:

public function rules(): array
{
    return [
        'foo' => 'required|max:255',
        'bar' => 'required',
    ];
}

做好了以上步骤,那么就可以使用了。

<?php
namespace App\Controller;

use App\Request\FooRequest;
use Hyperf\HttpServer\Annotation\AutoController;

/**
 * @AutoController()
 */
class IndexController
{
    public function index(FooRequest $request)
    {
        // 传入的请求通过验证...

        // 获取通过验证的数据...
        return $request->validated();
    }
}

请求路径忽然发现报错了.......

file

原来验证器语言文件依赖 hyperf/translation 组件。所以我们需要安装 hyperf/translation 组件

安装 hyperf/translation

composer require hyperf/translation

发布配置文件

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

生成的配置文件在 config/autoload/translation.php

<?php

declare(strict_types=1);

return [
    'locale' => 'zh_CN',
    'fallback_locale' => 'en',
    'path' => BASE_PATH . '/storage/languages',
];

ok,再次启动下服务,应该就可以了。 file

命令行中也抛出了异常

file

我们把参数添加上。 file

如果不想单独创建验证文件,那么也可以手动创建验证器

手动创建验证器

<?php
namespace App\Controller;

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

/**
 * @AutoController()
 */
class IndexController
{
    /**
     * @Inject()
     * @var ValidatorFactoryInterface
     */
    protected $validationFactory;

    public function foo(RequestInterface $request)
    {
        $validator = $this->validationFactory->make(
            $request->all(),
            [
                'foo' => 'required',
                'bar' => 'required',
            ],
            [
                'foo.required' => 'foo is required',
                'bar.required' => 'bar is required',
            ]
        );

        if ($validator->fails()){
            // Handle exception
            return $validator->errors()->first();
        }
        // Do something
    }
}

file

简单的测试就是这样了。更多复杂用法 请参考 验证器

注意事项

如果您在之前有使用 hyperf/translation 组件,那么您需要检查一下 config/autoload/translation.php 文件内的 locale配置项,如为 zh-CN,则需要改为 zh_CN,在 1.1 版本,官方统一更改了这个配置

另外就是该组件依赖 hyperf/translation 记得安装。

暂无回复
0 / 180
网站公告

LaravelCode 正式上线啦

--->>>体验新站

今日诗词
正在加载今日诗词....
标签云
PHP Laravel API 随想 Node.js Linux Yii2.0 Redis 队列 JavaScript Vue Java MySQL 微信小程序 Python Hyperf 转载