Symfony2, Twig JSON шаблоны vs json_encode: что подходит для этой ситуации

Быстрый вопрос о наилучшей практике.

У меня есть приложение AJAX, в котором есть 4 маршрута, которые все возвращают JSON, которые будут использоваться jQuery.

В настоящее время я использую что-то подобное в конце контроллера

return new Response(json_encode($some_array)); 

В одном месте я использую JMSSerializer, потому что объект, который я пытаюсь передать Javascript, имеет защищенные атрибуты. Это никогда не казалось правильным, и я подумал в какой-то момент, если я должен «научить» объект знать, как закодировать все его атрибуты JSON и отправить их как возвращаемое значение одного из его методов.

Во всяком случае, сегодня утром у меня была мозговая волна, что я должен сделать шаблон Twig JSON, который содержит точный формат, который я хочу ему вывести, а затем заполнить переменные из PHP. Пара циклов также понадобится для вывода коллекции объектов внутри объекта.

Таким образом, существует явное обещание / контракт с PHP о том, что именно он вернется к Javascript, который не может быть испорчен, если я случайно напомню об изменении объекта. Я подозреваю, что это будет проще для парня, который делает javascript для понимания, поскольку шаблон будет легче читать, чем PHP.

Я на правильном пути: следует ли использовать шаблоны JSON Twig, а не json_encode вообще?

EDIT (тем временем назад на ранчо)

После публикации этого вопроса мое исследование гласит:

Шаблоны Twig JSON vs json_encode

  • Исключить необходимость JMSSerializer и не незаконно получить защищенные атрибуты объекта.
  • Более читаемый / предсказуемый, особенно для парня с Javascript на другой стороне.
  • Twig проверит, существуют ли переменные. Немедленно будет флаг, если JSON не сможет соответствовать ожидаемому формату, потому что, например, объект изменился. Поэтому усложняет разрыв дружбы между Javascript и PHP.
  • Тестирование модуля также будет делать это (и может проверять значения), но может добавить это позже.
  • Отделяет внутренний объект от внешнего интерфейса, что означает шаблон, мы избегаем любых нежелательных особенностей того, как json_encode или JMSerializer хотят сформировать JSON. Поставляет меня как человека, который полностью контролирует то, что выпускает JSON.
  • Будет медленнее json_encode ()
  • «Я бы не использовал шаблон для визуализации данных как ответственность за экранирование данных и т. Д., А затем в шаблоне», – говорит Symfony2: Echoing JSON от контроллера для использования в сетке ExtJS 4
  • Средство делает {{variable_name | json_encode | raw}} много: см. http://twig.sensiolabs.org/doc/filters/json_encode.html (Raw означает отключить автоматическое экранирование)
  • «Эффективно просто возвращать данные JSON в качестве ответа от контроллера в любом случае, поскольку Symfony не нужно выполнять этап шаблонирования» говорит длина контента: 0 в ответ json Symfony2

Если вы беспокоитесь об отсутствии контракта, то, возможно, вам стоит просто написать единичный тест. Это может пойти еще дальше, так как вы могли бы также заключить договор о значениях атрибутов.