Symfony2,Twig JSON模板与json_encode:这种情况的正确性

关于最佳实践的快速问题。

我有一个AJAX应用程序,其中有4个路由都返回jQuery供jQuery使用。

我目前在Controller的末尾使用这样的东西

return new Response(json_encode($some_array)); 

在一个地方我使用JMSSerializer,因为我试图传递给Javascript的对象具有受保护的属性。 这似乎永远不对,我想知道我是否应该“教”对象知道如何将其所有属性编码为JSON并将其作为其中一个方法的返回值发送出去。

无论如何,我今天早上有一个脑波,我应该做的是制作一个包含我想要输出的确切格式的Twig JSON模板,然后填充PHP中的变量。 输出对象内的对象集合也需要几个循环。

这样就可以从PHP中明确承诺/合同将返回到Javascript,如果我碰巧改变了对象,那就不会搞砸了。 我怀疑对于那些正在进行javascript的人来说这会更容易理解,因为模板比PHP更容易阅读。

我是在正确的轨道上:我应该使用JSON Twig模板而不是json_encode吗?

编辑 (同时回到牧场)

自发表此问题以来,我的研究表明:

Twig JSON模板与json_encode

  • 将消除JMSSerializer的需要,而不是非法获取受保护的对象属性。
  • 更具可读性/可预测性,特别是对于另一方的Javascript人。
  • Twig将检查变量是否存在如果JSON无法匹配预期的格式,则会立即标记因为例如对象已更改。 因此,更难以打破Javascript和PHP之间的友谊。
  • unit testing也会这样做(并且可以validation值),但可以稍后添加。
  • 将内部对象与外部接口分开意味着作为模式,我们避免了有关json_encode或JMSerializer如何形成JSON的任何不需要的细节。 让我成为一个完全控制JSON输出的人。
  • 会慢于json_encode()
  • “我会避免使用模板来呈现数据,因为随后在模板中转义数据等的责任” Symfony2:从控制器回应JSON以在ExtJS 4网格中使用
  • 意味着做{{variable_name | json_encode | 很多:请参阅http://twig.sensiolabs.org/doc/filters/json_encode.html (原始意味着关闭自动转义)
  • “因为Symfony不需要进行模板化阶段,所以只需将JSON数据作为来自控制器的响应返回就更有效了” 在json响应中说内容长度:0 Symfony2

如果你担心的是没有合同,那么也许你应该写一个unit testing。 它可以更进一步,因为你也可以通过这种方式签订属性值的合同。