Symfony2,Twig JSON模板vs json_encode:适合这种情况的是什么

时间:2012-03-08 12:13:57

标签: php jquery ajax json symfony

关于最佳做法的快速提问。

我有一个AJAX应用程序,其中有4条路由都返回JSON供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之间的友谊。
  • 单元测试也会执行此操作(并且可以验证值),但可以稍后添加。
  • 将内部对象与外部接口分开,意味着作为模式,我们避免了有关json_encode或JMSerializer如何形成JSON的任何不需要的细节。让我成为一个完全控制JSON输出的人。
  • 比json_encode()
  • “我会避免使用模板来呈现数据,因为在模板中负责转义数据等”Symfony2: Echoing JSON From a Controller for Use in an ExtJS 4 Grid
  • 意味着做{{variable_name | json_encode |很多:看http://twig.sensiolabs.org/doc/filters/json_encode.html(原始意味着关闭自动转义)
  • “只需将JSON数据作为来自控制器的响应返回效率更高,因为Symfony不需要进行模板化阶段”Content length: 0 in a json response Symfony2

1 个答案:

答案 0 :(得分:1)

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