【问题标题】:Return a Json Response from a Controller in Symfony从 Symfony 中的控制器返回 Json 响应
【发布时间】:2019-09-18 00:56:24
【问题描述】:

我正在尝试从 Symfony 3.4 中的控制器返回 JSON 响应

这是我的控制器:

/**
     * @Route("/message/board/post", name = "message_post")
     * @Method("POST")
     */
    public function postMeg(Request $request)
    {
        $entityManager = $this->getDoctrine()->getEntityManager();
        $message = new message($request->request->get("txtName"));
        $message->setMes($request->request->get("txtMes"));
        $entityManager->persist($message);
        $entityManager->flush();
        return new JsonResponse(['result' => 'ok', 'ret' => array($entityManager)]);
    }

但我明白了 {"result":"ok","re​​t":[{}]} 作为浏览器中的响应

我希望它可以显示为 ['结果' => '好的', 'ret' => txtName, txtMes ]

【问题讨论】:

  • 这对我来说听起来并不合理。你期待什么样的回应?您能否edit 包含您希望此代码执行的操作?
  • 尝试将array($entityManager) 更改为array($message)。还可以考虑为您的数组使用速记符号;从 5.4 开始就支持它们。
  • @maiorano84 我试试这个return new JsonResponse(['result' => 'ok', 'ret' => array($message)]); 但仍然显示 {"result":"ok","re​​t":[{}]}
  • @Lai 这很奇怪。这意味着您的 $message 变量可能未正确初始化。仔细检查您的类名并确保您的 Message 实体被正确引用。您可以通过在返回之前添加dd([$message, $entityManager]) 并查看输出来尝试进一步调试。如果您在其中任何一个中有 null 或空对象,那就是您的问题。
  • 您的消息实体中是否有序列化程序组 (@groups)?

标签: php json symfony


【解决方案1】:

您应该使用$message 而不是 cmets 中提到的$entityManager,但是将实体传递给new JsonResponse() 将仅包含来自消息实体的public 属性,它们通常都是private。 有很多方法可以做到这一点,但最简单的方法是使用实​​体的 getter 准确插入您想要的内容:

return new JsonResponse([
  'result' => 'ok',
  'ret' => [
    'txtName' => $message->getTxtName(),
    'txtMes ' => $message->getTxtMes(),

  ],
]);

【讨论】:

    猜你喜欢
    • 2016-01-30
    • 2017-01-28
    • 2015-03-24
    • 2014-12-02
    • 1970-01-01
    • 2013-09-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多