Как вернуть json ответ в symfony 3.4 - PullRequest
       0

Как вернуть json ответ в symfony 3.4

0 голосов
/ 23 сентября 2019

это вопрос новичка, но я нигде не могу найти ответ.

Я пытаюсь вернуть JSON-ответ от контроллера в Symfony 3.4.

В контроллере, который у меня есть:

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);
        $data = $query->getQuery()->getArrayResult();
        $paginator = new Paginator($query, $fetchJoinCollection = false);
        $count = count($paginator);
        $pages = ceil($count/$per);
        return new JsonResponse(['result' => 'ok', 'ret' => ['name' => $data->getName(),
        'mes' => $data->getMes(),
        'update_time' => $data->getUpdateTime()->format('Y-m-d H:i:s')]]);
    }

Но я получаю

Вызов функции-члена 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 ":"Lai", "mes": "AppleAppleappleAPPLE", "update_time": "2019-09-20 11:11:09"}]}

1 Ответ

1 голос
/ 23 сентября 2019

Ваши $ data - это массив данных, (см. $query->getQuery()->getArrayResult())

Итак, вы пытаетесь получить атрибуты из массива вместо доступа к ним из соответствующего объекта.

Так каквы уже получаете результат массива, и вы хотите поместить его в часть имени вашего json, вы можете просто изменить jsonResponse на:

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

Возможно, вам придется изменить запрос , чтобы указать, какие атрибуты получать, а не получать всю сущность, в вашем случае name , mes и update_time .

Что-то вроде:

 $entityManager->createQueryBuilder()
            ->select("r.name, r.mes, r.update_time")
            //...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...