为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 symfony 3.4 中返回 json 响应

如何在 symfony 3.4 中返回 json 响应

PHP
holdtom 2022-01-24 09:41:18
这是一个新手问题,但我无法在任何地方找到答案。我正在尝试从 Symfony 3.4 中的控制器返回 JSON 响应。在控制器中我有:namespace MegBundle\Controller;use Symfony\Bundle\FrameworkBundle\Controller\Controller;use Symfony\Component\Routing\Annotation\Route;use MegBundle\Entity\message;use Doctrine\ORM\Tools\Pagination\Paginator;use Symfony\Component\HttpFoundation\JsonResponse;use Symfony\Component\HttpFoundation\Response;use Symfony\Component\HttpFoundation\Request;use Doctrine\Common\Inflector\Inflector;use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;class MegController extends Controller{    /**     * @Route("/message/board/page/{page}", name = "message_board", defaults = {"page" = 1}, requirements = {"page" = "\d+"})     * @Method("GET")     */    public function showMeg(Request $request, $page)    {        $entityManager = $this->getDoctrine()->getEntityManager();        if ($request->query->get("DESC") != null) {            $orderById = "DESC=ID";            $orderby = 'DESC';        }        if ($request->query->get("DESC") == null) {            $orderById = "ASC=ID";            $orderby = 'ASC';        }        $per = 5;        $start = ($page-1)*$per;        $query = $entityManager->createQueryBuilder()            ->select("r")            ->from("MegBundle:message", "r")            ->orderBy('r.id', $orderby)            ->setFirstResult($start)            ->setMaxResults($per);    }但我明白了调用数组上的成员函数 getName()。我希望我能像这样得到 JosnResponse{"result":"ok","ret":{"name":[{"name":"AAA","mes":"1234","update_time":"2019-09-20 10:54: 50"},{"name":"AAA","mes":"1234","update_time":"2019-09-20 11:08:53"},{"name":"赖","mes ":"AppleAppleappleAPPLE","update_time":"2019-09-20 11:11:09"}]}
查看完整描述

1 回答

?
慕勒3428872

TA贡献1848条经验 获得超6个赞

您的 $data 是一个数据数组,(请参阅$query->getQuery()->getArrayResult()

因此,您正在尝试从数组中获取属性,而不是从适当的对象中访问它们。

由于您已经获得了一个数组结果,并且您想将其放在 json 的名称部分中,因此您可以将jsonResponse更改为:

return new JsonResponse(['result' => 'ok', 'ret' => ['name' => $data]]);

您可能需要更改查询以指定要获取哪些属性而不是获取整个实体,在您的情况下为 namemesupdate_time

就像是 :

 $entityManager->createQueryBuilder()
            ->select("r.name, r.mes, r.update_time")
                        //...


查看完整回答
反对 回复 2022-01-24
  • 1 回答
  • 0 关注
  • 184 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信