semantic-lab/lara-validator

为开发者提供更方便生成带有验证规则的 FormRequest 的 Laravel artisan 命令扩展

v1.0 2019-09-11 08:03 UTC

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": {}
    }
  }
}