前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >带你学习hyperf-3.7 验证器

带你学习hyperf-3.7 验证器

作者头像
美团骑手
发布2021-12-24 18:18:50
发布2021-12-24 18:18:50
1.2K00
代码可运行
举报
文章被收录于专栏:技术进阶技术进阶
运行总次数:0
代码可运行

3.7 验证器

与laravel的表单验证基本相同

1. 安装composer类库
代码语言:javascript
代码运行次数:0
复制
composer require hyperf/validation

Bash

Copy

2. 设置表单验证的中间件:config/autoload/middlewares.php
代码语言:javascript
代码运行次数:0
复制
<?php

return [
    'http' => [
        HyperfValidationMiddlewareValidationMiddleware::class
    ],
];

PHP

Copy

3. 添加表单验证出错的异常处理
代码语言:javascript
代码运行次数:0
复制
<?php

return [
    'handler' => [
        'http' => [
            // 验证器的异常处理
            HyperfValidationValidationExceptionHandler::class,

            HyperfHttpServerExceptionHandlerHttpExceptionHandler::class,
            AppExceptionHandlerAppExceptionHandler::class,
        ],
    ],
];

PHP

Copy

4. 创建验证器语言文件
代码语言:javascript
代码运行次数:0
复制
php bin/hyperf.php vendor:publish hyperf/translation
php bin/hyperf.php vendor:publish hyperf/validation

PHP

Copy

5. 使用:表单验证类
代码语言:javascript
代码运行次数:0
复制
php bin/hyperf.php gen:request CreateUserRequest

Bash

Copy

  • 定义规则
代码语言:javascript
代码运行次数:0
复制
<?php
/**
 * 表单的验证类
 */
namespace AppRequest;

use HyperfValidationRequestFormRequest;

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

Copy

  • 依赖注入的方式验证
代码语言:javascript
代码运行次数:0
复制
<?php
/**
 * 控制器
 */
namespace AppController;

use AppRequestCreateUserRequest;

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

PHP

Copy

  • 使用:通过表单验证对象
代码语言:javascript
代码运行次数:0
复制
<?php
namespace AppController;

class IndexController extends AbstractController
{
    /**
     * @HyperfDiAnnotationInject()
     * @var HyperfValidationContractValidatorFactoryInterface
     */
    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();
    }
}

PHP

Copy

注:自定义验证属性

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-10-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 3.7 验证器
    • 1. 安装composer类库
    • 2. 设置表单验证的中间件:config/autoload/middlewares.php
    • 3. 添加表单验证出错的异常处理
    • 4. 创建验证器语言文件
    • 5. 使用:表单验证类
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档