Прямо сейчас я получаю данные из базы данных через 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
@Loek Wooow, это то, что я долго искал ...
@Loek Вы когда-нибудь устанавливали этот пакет? Я попытался установить его, но получил сообщение об ошибке: stackoverflow.com/questions/51303702/…






Итак, сделайте второй аргумент 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 }}
Можно было сделать это простым способом и на
return $this->render('homepage.twig.html', [$jsonContent]);. Вот как это делает этот пакет: omines.github.io/datatables-bundle