首页 > 解决方案 > 如何使用 PATCH HTTP 方法从请求对象中获取 JSON 格式的表单内容?

问题描述

我正在尝试从 symfony 中的请求对象中检索 JSON 格式的表单数据。我熟悉使用 POST 和 GET 方法,以及使用 检索数据$request->request->get('something'),但这不适用于 PATCH。(返回 null,这意味着在 'something' 下不存在任何东西)。

当使用我的 JSON 转储变量的内容时, var_dump($request->getcontent()); 会出现在一些 XML 标记之后,但我无法提取它。

有什么方法可以让我轻松获得它,比如使用 POST 方法时?

$form =$this->createForm(ProjectUpdateType::class, $project);
$data = json_decode($request->request->get('project'),true);
$form->submit($data, true);

$data使用此方法变为 null,因为 $request->request->get('project')is null。但正如我提到的,JSON 存在于某个地方,但我不知道如何提取它。先感谢您!

<pre class='xdebug-var-dump' dir='ltr'> 
    <small>/vagrant/src/Controller/ProjectController.php:129:</small>
    <small>string</small> 
        <font color='#cc0000'>'-----------------------------100229165918779178541068782244&#13;&#10;Content-Disposition: form-data; name=&quot;project&quot;&#13;&#10;&#13;&#10;{&quot;title&quot;:&quot;newTitle&quot;,&quot;description&quot;:&quot;NewDescription&quot;,&quot;priority&quot;:false}&#13;&#10;-----------------------------100229165918779178541068782244--&#13;&#10;'</font> 
        <i>(length=244)</i> 
</pre>

标签: phpjsonformssymfonyhttp

解决方案


JSON 存在于正文中,并且$request->getContent()是获取它的唯一正确方法。这里的问题不在于您无法获取 JSON - 而是响应包含的不仅仅是 JSON 对象,或者换句话说,是无效的 JSON。但是,如果您使用的 API 实际上应该在 XML 文档中返回 JSON,那么您必须首先解析这个 XML,例如使用SimpleXML 。


推荐阅读