kirsankifat / request-data-bundle
以结构化和有用的方式表示请求数据。
v1.4.2
2022-02-18 11:01 UTC
Requires
- php: ^7.4|^8.0
- symfony/config: ~3.4|~4.0
- symfony/dependency-injection: ~3.4|~4.0
- symfony/event-dispatcher: ~3.4|~4.0
- symfony/http-kernel: ~3.4|~4.0
- symfony/property-access: ~3.4|~4.0
- symfony/serializer: ~3.4|~4.0
Requires (Dev)
- phpunit/phpunit: ^7
This package is auto-updated.
Last update: 2024-09-18 17:01:01 UTC
README
此包允许您通过创建请求数据类以结构化和有用的方式表示请求数据。
功能:
- 检测如何提取数据取决于请求方法和
Content-Type
标头。 - 表示和标准化
GET
请求方法的查询参数。 - 表示
POST
、PUT
、PATCH
请求方法的form
、json
、xml
请求体。 - 定义支持的格式,如果请求格式不受支持,则抛出异常。
- 当请求数据准备就绪时,分发完成事件。
安装
使用 Composer 运行以下命令
composer require bilyiv/request-data-bundle
配置
默认配置如下
request_data: prefix: App\RequestData
用法
创建请求数据类
namespace App\RequestData; class PostRequestData implements FormatSupportableInterface { public const DEFAULT_AUTHOR = 'none'; /** * @var string */ public $title; /** * @var string */ public $author = self::DEFAULT_AUTHOR; /** * {@inheritdoc} */ public static function getSupportedFormats(): array { return [Formats::FORM, Formats::JSON, Formats::XML]; } }
在您的控制器中使用它
namespace App\Controller; class PostController extends AbstractController { /** * @Route("/", name="action") */ public function action(PostRequestData $data) { return new JsonResponse($data); } }
发起请求
以下所有请求都将返回相同的 JSON 响应
{ "title": "Hamlet", "author": "William Shakespeare" }
GET
请求
curl -X GET 'https://example.com?title=Hamlet&author=William+Shakespeare'
POST
表单请求
curl -X POST 'https://example.com' \ -H 'Content-Type: application/x-www-form-urlencoded' \ -d 'title=Hamlet&author=William+Shakespeare'
POST
JSON 请求
curl -X POST 'https://example.com' \ -H 'Content-Type: application/json' \ -d '{"title":"Hamlet","author":"William Shakespeare"}'
POST
XML 请求
curl -X POST 'https://example.com' \ -H 'Content-Type: application/xml' \ -d '<post><title>Hamlet</title><author>William Shakespeare</author></post>'
POST
CSV 请求由于不支持格式而抛出异常
curl -X POST 'https://example.com' \ -H 'Content-Type: application/csv' \ -d 'Hamlet,William Shakespeare'
许可证
此包采用 MIT 许可证发布。有关更多信息,请参阅包含的 LICENSE 文件。