semantic-lab / lara-validator
为开发者提供更方便生成带有验证规则的 FormRequest 的 Laravel artisan 命令扩展
Requires
- ext-json: *
This package is not auto-updated.
Last update: 2024-10-03 09:46:07 UTC
README
semantic-lab/lara-validator-test 是一个 Laravel php artisan 插件,可以轻松将 JSON 文件转换为 Laravel FormRequest。
用法
通过 composer
composer require semantic-lab/lara-validator --dev
或者将包添加到 composer.json 中的依赖项,并在命令行中运行 composer update 以下载包
{
"require-dev": {
"lara-validator": "1.0"
}
}
命令
make
此命令将生成带有规则配置(JSON 文件)的 Laravel FormRequest,这些配置位于 {project}/config/validators/ 下(有关规则配置设置,请参阅更多信息)。
php artisan validator:make
执行命令后,默认情况下,FormRequest 将在 {project}/app/Http/Requests/ 下生成,然后您可以在控制器中使用 FormRequest 来验证请求。
<?php
use App\Http\Requests\Login;
class UserController extends Controller
{
public function login(Login $request) {
// ...
}
}
:make
规则配置
规则配置是一个 JSON 文件,其中包含位于 {project}/config/validators/ 下的请求规则。这些配置不仅用于生成后端 FormRequest,而且对前端在传递到后端进行双重检查之前验证数据也非常有用(有关 JavaScript 验证的更多信息,请参阅更多信息)。
{
"validators": {}
}
上面的示例是规则配置的格式,您可以在 "validators" 下设置多个验证器。每个验证器都会生成一个 FormRequest。
在示例中,它将根据下面的规则配置生成 "Login" 和 "Register" 两个 FormRequest。
{
"validators": {
"Login": {
"body": {}
},
"Register": {
"body": {}
}
}
}
简单设置
如果请求很简单,要验证的字段没有嵌套规则或数组规则要设置,大多数规则设置都与 Laravel 原始验证设置相同。
开始我们的规则设置,请注意,所有规则都应该在 "body" 属性下设置。
默认错误信息
使用 Laravel 默认消息,可以设置如下
{
"validators": {
"Login": {
"body": {
"email": "required|string|email",
"password": "required|string|min:6"
}
}
}
}
自定义错误信息
如果您需要为特殊规则设置自定义错误消息,只需在 "rules" 属性下设置规则即可。
{
"validators": {
"Login": {
"body": {
"email": "required|string|email",
"password": {
"rules": {
"required": null,
"string": null,
"min:6": "The field 'password' can not be less then :min characters."
}
}
}
}
}
}
上面的示例中,字段 "password" 下的规则 "required" 和 "string" 使用默认错误消息通过设置 null 来使用,而规则 "min:6" 则具有自定义错误消息。
复杂设置
如果要验证的字段值是一个数组或存在要验证的嵌套字段,请按照以下设置进行。
嵌套规则设置
要设置嵌套字段,只需将其设置为嵌套对象。
{
"validators": {
"CreateGroup": {
"body": {
"id": "required|string",
"token": "required|string",
"group": {
"isPrivate": "boolean",
"groupName": "required|string",
"startDate": "present|date",
"frequency": "present|in:1,30,90",
"endDate": "present|date"
}
}
}
}
}
上面的示例中,我们可以设置 "group" 子字段的规则。
数组规则设置
为了验证数组字段中的所有子字段,请设置数组值中的示例。
{
"validators": {
"CreateUsers": {
"body": {
"users": [
{
"name": "required|string|min:4",
"email": "required|email",
"password": "required|string|min:6|regex:/^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[!@#$%^&*?]).*$/i|confirmed",
"phone": "required|regex:/^(09)[0-9]{8}$/gi|bail",
"gender": "nullable|numeric|in:0,1,2",
"address": "present|string"
}
]
}
}
}
}
包括示例,这是一个注册多个用户的 API 规则。因为所有用户都有要验证的相同字段,我们只需在数组值中设置一次。
高级
失败响应
Laravel 默认在请求无效时的重定向 URL,在我们的规则配置中,也支持几种不同的失败响应类型。
我们可以为同一规则配置中的所有验证器设置默认的失败响应,并针对特定验证器进行自定义。
{
"validators": {
"Login": {
"body": {},
"failResponse": {
"type": "exception"
}
},
"CreateUsers": {
"body": {}
}
},
"failResponse": {
"type": "ignore"
}
}
上面的示例中,"Login" 验证器具有自定义的失败响应 "exception",而未设置失败响应的 "CreateUsers" 验证器将使用默认的失败响应 "ignore",这是在第一层设置的。
可用的失败响应类型
| 类型 | 注释 |
|---|---|
| 默认 | 重定向到 "/" |
| 忽略 | 仍然通过控制器函数(操作)传递 |
| 异常 | 响应将以 JSON 格式返回 \Illuminate\Support\MessageBag |
| 响应 | 响应将返回给定的响应类,并以JSON格式呈现 |
默认
如果默认使用同一规则配置中所有验证器的“默认类型”响应,则无需设置;在其他情况下,设置属性“failResponse”如下。
{
"failResponse": {
"type": "default"
}
}
忽略
有时即使请求无效,我们也需要将其传递到控制器函数中进行更多处理,此时可以将“failResponse”属性设置为“ignore”。
{
"failResponse": {
"type": "ignore"
}
}
异常
要返回以JSON格式呈现的消息包作为响应,请将属性“failResponse”设置如下。
{
"failResponse": {
"type": "exception",
"httpStatus": 200
}
}
存在一个可选属性“httpStatus”,用于设置响应的HTTP状态,Laravel默认为422。
响应
如果我们想在请求无效时返回响应,但以特定的JSON结构返回,可以将“failResponse”属性设置为“response”。
{
"failResponse": {
"type": "response",
"class": "manager\LoginResponse",
"httpStatus": 200
}
}
以下定义了可选属性
| 属性 | 注释 |
|---|---|
| 类 | 响应类在{project}/app/Http/Response/下的子路径 |
| httpStatus | 响应的HTTP状态 |
例如,我们首先创建一个实现App\Http\Responses\IValidatorResponse的响应类,
<?php
namespace App\Http\Responses\manager;
use App\Http\Responses\IValidatorResponse;
class LoginResponse implements IValidatorResponse
{
public function setValidationError($error){
// TODO: Implement setValidationError() method.
}
public function toJSONResponse($httpStatus = 422){
// TODO: Implement toJSONResponse() method.
}
}
然后设置规则配置。
{
"validators": {
"Login": {
"body": {},
"failResponse": {
"type": "response",
"class": "manager\LoginResponse",
"httpStatus": 200
}
},
"CreateUsers": {
"body": {}
}
}
}