kirsankifat/request-data-bundle

以结构化和有用的方式表示请求数据。

安装: 34

依赖: 0

建议者: 0

安全: 0

星标: 0

关注者: 1

分支: 0

开放问题: 0

类型:symfony-bundle

v1.4.2 2022-02-18 11:01 UTC

This package is auto-updated.

Last update: 2024-09-18 17:01:01 UTC


README

此包允许您通过创建请求数据类以结构化和有用的方式表示请求数据。

功能:

  • 检测如何提取数据取决于请求方法和 Content-Type 标头。
  • 表示和标准化 GET 请求方法的查询参数。
  • 表示 POSTPUTPATCH 请求方法的 formjsonxml 请求体。
  • 定义支持的格式,如果请求格式不受支持,则抛出异常。
  • 当请求数据准备就绪时,分发完成事件。

安装

使用 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 文件。