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();
}
}
请求路径忽然发现报错了.......
原来验证器语言文件依赖 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,再次启动下服务,应该就可以了。
命令行中也抛出了异常
我们把参数添加上。
如果不想单独创建验证文件,那么也可以手动创建验证器
手动创建验证器
<?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
}
}
简单的测试就是这样了。更多复杂用法 请参考 验证器
注意事项
如果您在之前有使用 hyperf/translation 组件,那么您需要检查一下
config/autoload/translation.php
文件内的locale
配置项,如为zh-CN
,则需要改为zh_CN
,在 1.1 版本,官方统一更改了这个配置另外就是该组件依赖 hyperf/translation 记得安装。
关于极客返利
极客返利 是由我个人开发的一款网课返利、返现平台。包含 极客时间返现、拉勾教育返现、掘金小册返现、GitChat返现。目前仅包含这几个平台。后续如果有需要可以考虑其他平台。 简而言之就是:你买课,我返现。让你花更少的钱,就可以买到课程。
版权许可
本作品采用 知识共享署名 4.0 国际许可协议 进行许可。转载无需与我联系,但须注明出处,注明文章来源 Hyperf 初体验-验证器