Как я могу получить данные из базы данных mysql с помощью json encode (Symfony 4)?

Прямо сейчас я получаю данные из базы данных через Doctrine:

$articles = $this->getDoctrine()->getRepository(Article::class)->findAll();
return $this->render('homepage.html.twig', array('articles' => $articles));

Это нормально работает. Но мне нужно получить данные через кодировку json, потому что я хочу использовать данные обработки на стороне сервера. Поэтому я пытаюсь использовать сериализатор

  $encoders = array(new XmlEncoder(), new JsonEncoder());
  $normalizers = array(new ObjectNormalizer());

  $serializer = new Serializer($normalizers, $encoders);
  $articles = $this->getDoctrine()->getRepository(Article::class)->findAll();
  $jsonContent = $serializer->serialize($articles, 'json');

  return $this->render('homepage.html.twig', $jsonContent);

Но я получаю сообщение об ошибке:

Argument 2 passed to Symfony\Bundle\FrameworkBundle\Controller\AbstractController::render() must be of the type array, string given, called in /Users/work/project/src/Controller/ArticleController.php on line 46 Uncaught PHP Exception Symfony\Component\Debug\Exception\FatalThrowableError: "Argument 2 passed to Symfony\Bundle\FrameworkBundle\Controller\AbstractController::render() must be of the type array, string given, called in /Users/work/project/src/Controller/ArticleController.php on line 46" at /Users/work/project/vendor/symfony/framework-bundle/Controller/ControllerTrait.php line 219

Можно было сделать это простым способом и на return $this->render('homepage.twig.html', [$jsonContent]);. Вот как это делает этот пакет: omines.github.io/datatables-bundle

Loek 12.07.2018 11:25

@Loek Wooow, это то, что я долго искал ...

peace_love 12.07.2018 11:45

@Loek Вы когда-нибудь устанавливали этот пакет? Я попытался установить его, но получил сообщение об ошибке: stackoverflow.com/questions/51303702/…

peace_love 12.07.2018 13:11
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
3
531
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Итак, сделайте второй аргумент render массивом:

return $this->render('homepage.html.twig', ['json_content' => $jsonContent]);

В шаблоне:

{{ json_content }}

Хотя я не знаю, почему вы используете шаблон, поскольку есть метод json(), который возвращает один json:

return $this->json($articles); // without using serializer

вы также можете использовать функцию twig для json_encode вещей: {{ articles|json_encode }}

olidem 12.07.2018 13:41

Другие вопросы по теме