Итак, я пытаюсь создать объект 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?
Не ходи сюда. Шаблоны должны только ОТОБРАЖАТЬ и не содержать никакой логики. Я знаю, что это заманчиво, но все же ...
Проблема в последней запятой? или если get_url возвращает неверный URL?
Если вы не можете сделать это в своем контроллере, по крайней мере, используйте пользовательскую функцию Twig для создания вашего json. symfony.com/doc/current/templating/twig_extension.html
Спасибо, парни! Теперь, когда я думаю об этом, это имеет смысл. Я создам объект в модели или в сервисе. @Matteo get_url () используется только для примера, проблема в последней запятой.






Вы можете проверить, является ли последняя итерация цикла, с помощью стандартного переменная цикла 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
Язык шаблонов на самом деле не подходит для создания сложных объектов. Это то, что вам следует решить в PHP.