【问题标题】:Symfony json response is returning content twiceSymfony json响应返回内容两次
【发布时间】:2019-04-10 08:52:22
【问题描述】:

我一直在使用 Symfony 作为后端编写 API,第三方编写的插件正在将某些数据发送到端点,然后端点返回一个 json 编码的响应,但是按照中列出的说明进行操作当前 symfony 文档(https://symfony.com/doc/current/components/http_foundation.html)返回值显示两次,响应格式不正确,输出类似字符串

我编写的原始方法调用了数据库来验证令牌、存储书签并显示后端过程的结果,但是当着手处理并删除除了响应构建之外的所有内容时;很明显,这就是问题所在。该方法使用这个sn-p,虽然为了清楚起见,我没有包括数据库处理并使用发布的值作为返回数组,如果是发布或处理的数据,结果是相同的,输出显示两次。

$token = $request->request->get('token');
$bookmark = $request->request->get('bookmark');
$data = ['token' => $token, 'bookmark' => $bookmark];
$response = new Response();
$response->headers->set('Access-Control-Allow-Origin', '*');
$response->setContent(json_encode($data));
$response->send();
return $response;

我期待的是单个 json 响应,但返回的是 json 输出的双字符串

例如如果我将这些值发布到上面的 sn-p:

token: ksjdbvqpi8e7rqp7evbprb
bookmark: http://www.google.com

返回结果是

    {"token":"ksjdbvqpi8e7rqp7evbprb", "bookmark":"http:\/\/www.google.com"}{"token":"ksjdbvqpi8e7rqp7evbprb", "bookmark":"http:\/\/www.google.com"}

当我期待的只是

{"token":"ksjdbvqpi8e7rqp7evbprb", "bookmark":"http:\/\/www.google.com"}

目前我不知道为什么它会显示两次,我们一如既往地感谢任何帮助。

谢谢

【问题讨论】:

  • 删除$response->send();
  • 正如@u_mulder 所说,您必须删除$response->send() 部分。你已经得到了控制器对 symfony 的响应。 Symfony 然后做其他事情来处理发送命令本身,你不需要这样做。
  • @u_mulder 谢谢你,如果你把这个添加为答案,我会把它标记为正确的,谢谢

标签: php json symfony http-headers response


【解决方案1】:

$response->send(); 是应该删除的行。

由于您已经返回了 Response 类的对象,symfony 会注意输出此响应到浏览器,您无需使用 send() 手动执行此操作。

【讨论】:

    猜你喜欢
    • 2017-04-19
    • 1970-01-01
    • 1970-01-01
    • 2022-01-14
    • 2018-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多