nestecha / laravel-json-api-validation
允许您使用Laravel原生验证来返回符合JSON API规范的错误。
5.0.0
2023-06-26 12:51 UTC
Requires
- php: ^8.1|^8.2
- cloudcreativity/laravel-json-api: ^6.0
- illuminate/support: ^10.0
Requires (Dev)
- orchestra/testbench: ^8.0
- phpunit/phpunit: ^10.0
README
此包帮助在使用Laravel原生验证逻辑的同时返回符合JSON API规范的错误。同时,它允许您为验证规则添加唯一的代码,这使消费者端的操作更加容易。
Laravel / Lumen 版本
安装
您可以通过composer安装此包
- Laravel / Lumen 10
composer require "nestecha/laravel-json-api-validation":"^5.0"
- Laravel / Lumen 9
composer require "nestecha/laravel-json-api-validation":"^4.0"
- Laravel / Lumen 8
composer require "nestecha/laravel-json-api-validation":"^3.0"
- Laravel / Lumen 7
composer require "nestecha/laravel-json-api-validation":"^2.0"
- Laravel / Lumen 6
composer require "nestecha/laravel-json-api-validation":"^1.0"
进入 App\Exceptions\Handler.php
并修改 render
方法
/** * Render an exception into an HTTP response. * * @param \Illuminate\Http\Request $request * @param \Exception $exception * @return \Illuminate\Http\Response|\Illuminate\Http\JsonResponse */ public function render($request, Exception $exception) { if ($exception instanceof \Nestecha\LaravelJsonApiValidation\Exception\JsonApiValidationException) { $responseFactory = new \Nestecha\LaravelJsonApiValidation\ResponseFactory(); return $responseFactory->fromErrors($exception->errors()->getArrayCopy()); } return parent::render($request, $exception); }
然后,在您的控制器中
public function home(Request $request) { $validator = new \Nestecha\LaravelJsonApiValidation\JsonApiValidator(); $validator->validateAsJsonApi($request->all(), ['title' => 'required']); // ... }
这将产生
{ "errors": [ { "status": "422", "title": "Unprocessable Entity", "detail": "The title field is required.", "source": { "pointer": "\/data\/attributes\/title", "value": "" }, "meta": { "failed": { "rule": "required" } } } ] }
对于Laravel
要添加错误代码,使用以下artisan命令将默认配置文件复制到您的配置文件夹。
php artisan vendor:publish --tag=config
对于Lumen
要添加错误代码,一个基本配置文件可用,只需将其复制粘贴到您的配置文件夹中,命名为 json-api-validation.php
。然后在 bootstrap/app.php
中添加此行
$app->configure('json-api-validation');
自定义配置文件名
json-api-validation.php
是默认配置文件名。您可以通过构造函数传递一个字符串来自定义验证器。
public function home(Request $request) { $validator = new JsonApiValidator('name-of-your-config-file'); $validator->validateAsJsonApi($request->all(), ['title' => 'required']); }
自定义规则
当使用Laravel 自定义规则 时
class UppercaseRule implements Rule { /** * @inheritDoc */ public function passes($attribute, $value) { return strtoupper($value) === $value; } /** * @inheritDoc */ public function message() { return "The :attribute should be uppercase."; } }
要在配置中添加错误代码,您应该使用短横线连接的小写名称
return [ 'uppercase-rule' => ['code' => 'VALIDATION_ERROR_UPPERCASE'], ];
错误将按照kebab-case格式在meta字段中格式化规则名称
{ "errors": [ { "status": "422", "title": "Unprocessable Entity", "detail": "The title should be uppercase.", "source": { "pointer": "\/data\/attributes\/title", "value": "lowercase_title" }, "meta": { "failed": { "rule": "uppercase-rule" } } } ] }
测试
composer test
变更日志
请参阅 CHANGELOG 了解最近更改的详细信息。
贡献
请参阅 CONTRIBUTING 了解详细信息。
安全
如果您发现任何与安全相关的问题,请通过电子邮件 steve@kang.fr 反馈,而不是使用问题跟踪器。
鸣谢
许可
MIT许可(MIT)。请参阅 许可文件 了解更多信息。