Создайте действительный объект json в Twig

Итак, я пытаюсь создать объект JSON в шаблоне Twig и столкнулся с некоторыми проблемами. Ответ на запрос POST с помощью Twig работает нормально:

{"urls": ["/a","/b"]}

Однако, если есть недопустимый json, например, конечная запятая, например:

{"urls": ["/a","/b",,,,,]}

тогда javascript жалуется, когда получает его (что имеет смысл, поскольку он недействителен).

Выполнение чего-то подобного всегда приведет к недействительному JSON из-за конечной запятой:

{"urls": [
{% for i in objects %}
    "/img/example/'~i.get_url()",
{% endfor %}
]}

Вопрос:

Итак, как использовать Twig для перебора массива объектов и создания действительного объекта JSON?

Язык шаблонов на самом деле не подходит для создания сложных объектов. Это то, что вам следует решить в PHP.

deceze 30.05.2018 12:03

Не ходи сюда. Шаблоны должны только ОТОБРАЖАТЬ и не содержать никакой логики. Я знаю, что это заманчиво, но все же ...

emix 30.05.2018 12:05

Проблема в последней запятой? или если get_url возвращает неверный URL?

Matteo 30.05.2018 12:05

Если вы не можете сделать это в своем контроллере, по крайней мере, используйте пользовательскую функцию Twig для создания вашего json. symfony.com/doc/current/templating/twig_extension.html

fxbt 30.05.2018 12:13

Спасибо, парни! Теперь, когда я думаю об этом, это имеет смысл. Я создам объект в модели или в сервисе. @Matteo get_url () используется только для примера, проблема в последней запятой.

Donal.Lynch.Msc 30.05.2018 12:13
Стоит ли изучать 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 и хотите разрабатывать...
2
5
1 088
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

Вы можете проверить, является ли последняя итерация цикла, с помощью стандартного переменная цикла twig, например:

{"urls": [
{% for i in objects %}
    "/img/example/'{{i.get_url()}}"{% if not loop.last %}  , {%endif%}
{% endfor %}
]}

Проверить рабочий пример это

Надеюсь на эту помощь

Вы можете создать собственный фильтр веточки и вывести его на страницу, например:

{{ objects |obj2Json }}

В фильтре вы можете просто json_encode объект.

https://symfony.com/doc/current/templating/twig_extension.html

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