theplankmeister / form-data-transposer
将请求中的 JSON 数据转换为表单数据。
Requires
- symfony/http-kernel: ^3.4|^4.0
- symfony/serializer-pack: ^1.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^2.13
- phpspec/phpspec: ^5.1
- phpstan/phpstan: ^0.10.6
README
在 Symfony 中将解码的 POSTed JSON 数据转换为表单数据请求参数
你可能遇到的情况是,你的 Symfony 应用可能不会接收到包含表单数据的 POST 请求,而是包含 JSON 数据,例如,如果你的前端发送的是 application/json
而不是实际的 HTML 表单的 XHR 请求。如果你使用 symfony/form
进行表单验证,你将注意到 Form::handleRequest(Request $request)
将会完全忽略 application/json
请求体中的 JSON 数据。
此监听器拦截 POSTed 的 application/json
请求,解码内容,并将解码数据中的每个属性/值应用到请求参数上。然后,在你的控制器操作中,Form::handleRequest(Request $request)
将会按预期工作,就像它接收了一个包含相同数据的标准的 application/x-www-form-urlencoded
请求一样。
与 Symfony 应用集成
在我能够发布一个 Symfony flex 食谱之前,你需要手动将 配置文件 复制到你的项目的配置目录中,或者手动将配置文件的内容复制到你的配置中。我只需要在 Symfony4 项目上使用它,所以如果你需要在使用旧版本时使用它,你非常欢迎提交一个带有适当依赖项更改的 PR。
构造函数参数
构造函数接受两个可选的布尔参数,$rethrowDecoderException
和 $checkIsXmlHttpRequest
,可以在服务定义中调整。$rethrowDecoderException
决定在解码 JSON 时捕获的异常是否应该被重新抛出。$checkIsXmlHttpRequest
决定是否在条件检查请求时调用 Request::isXmlHttpRequest()
。