nestecha/laravel-json-api-validation

允许您使用Laravel原生验证来返回符合JSON API规范的错误。

5.0.0 2023-06-26 12:51 UTC

This package is auto-updated.

Last update: 2024-09-26 15:22:11 UTC


README

Latest Version on Packagist Build Status Quality Score Total Downloads

此包帮助在使用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)。请参阅 许可文件 了解更多信息。