膜 / laravel
Requires
- php: ^8.1.0
- crell/api-problem: ^3.6.1
- illuminate/console: ^9.0 || ^10.0
- illuminate/http: ^9.0 || ^10.0
- illuminate/support: ^9.0 || ^10.0
- membrane/membrane: ^0.8
- membrane/openapi-router: ^0.4.0
- nyholm/psr7: ^1.8
- symfony/psr-http-message-bridge: ^2.1
Requires (Dev)
- phpstan/phpstan: ^1.10.56
- phpunit/phpunit: ^10.3
- squizlabs/php_codesniffer: ^3.7
README
将 Membrane-core 与 Laravel 集成。
关于
中间件,用于验证来自传入 HTTP 请求的原始用户输入是否符合您的 OpenAPI 规范。
在您的 Illuminate\Contracts\Container\Container
上添加一个 Membrane\Result\Result
。
在无效请求的情况下,结果对象包含清理后的数据和额外的详细信息。
设置
安装
在您的 composer.json 中要求 membrane/laravel
包,并更新您的依赖项
composer require membrane/laravel
配置
默认设置在 config/membrane.php
中。
要发布到您自己的配置,请使用以下方法
php artisan vendor:publish --tag="membrane"
API 规范文件
这是您的 OpenAPI 的 绝对 文件路径。
默认情况下,它查找 <your-project-directory>/api/openapi.yaml
。
验证错误响应代码
将 'validation_error_response_code'
设置为无效结果的默认 HTTP 状态码的 整数 值。
验证错误响应类型
将 'validation_error_response_type'
设置为 API 问题默认响应类型的 字符串 值。
API 问题响应类型
在 'api_problem_response_types'
数组中:设置 整数 HTTP 状态码 > 字符串 响应类型对。
这些更具体,将覆盖 'validation_error_response_type'
设置的默认值
使用方法
请求
\Membrane\Laravel\Middleware\RequestValidation
中间件将验证或无效化传入的请求,让您决定如何响应。您可以在自己的自定义中间件之后或以下内置选项之一之后添加它以生成错误响应
响应
任何响应中间件都必须跟随 RequestValidation
中间件,因为它需要将 result
对象添加到您的容器中。
这些中间件将检查请求是否通过了验证或失败了验证。
无效的请求将返回一个适当的响应,详细说明请求无效的原因。
您的响应可以采用以下格式之一。
平面 Json
\Membrane\Laravel\Middleware\ResponseJsonFlat
{
"errors":{
"pet->id":["must be an integer"],
"pet":["name is a required field"]
},
"title":"Request payload failed validation",
"type":"about:blank",
"status":400
}
嵌套 Json
\Membrane\Laravel\Middleware\ResponseJsonNested
{
"errors":{
"errors":[],
"fields":{
"pet":{
"errors":[
"name is a required field"
],
"fields":{
"id":{
"errors":[
"must be an integer"
],
"fields":[]
}
}
}
}
},
"title":"Request payload failed validation",
"type":"about:blank",
"status":400
}
全局使用
要使用上述中间件的所有路由,请进入您的 app/Http/Kernel.php
并将其添加到您的 middleware
数组中。
例如
protected $middleware = [ \Membrane\Laravel\Middleware\RequestValidation::class, \Membrane\Laravel\Middleware\ResponseJsonFlat::class // ... ];