Php Symfony2,Twig JSON模板与JSON编码:什么';在这种情况下是正确的

Php Symfony2,Twig JSON模板与JSON编码:什么';在这种情况下是正确的,php,jquery,ajax,json,symfony,Php,Jquery,Ajax,Json,Symfony,关于最佳实践的快速问题 我有一个AJAX应用程序,其中有4条路由都返回JSON供jQuery使用 我目前正在控制器的末尾使用类似的东西 return new Response(json_encode($some_array)); 在一个地方,我使用JMSSerializer,因为我试图传递给Javascript的对象具有受保护的属性。这似乎从来都不对,我一度想知道是否应该“教”对象知道如何将其所有属性编码为JSON,并将它们作为其方法之一的返回值发送出去 无论如何,今天早上我有一个想法,我应该

关于最佳实践的快速问题

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

我目前正在控制器的末尾使用类似的东西

return new Response(json_encode($some_array));
在一个地方,我使用JMSSerializer,因为我试图传递给Javascript的对象具有受保护的属性。这似乎从来都不对,我一度想知道是否应该“教”对象知道如何将其所有属性编码为JSON,并将它们作为其方法之一的返回值发送出去

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

这样,PHP就有了一个明确的承诺/契约,即它将返回到Javascript的具体内容,如果我碰巧更改了对象,就不会弄糟。我怀疑这会让做javascript的人更容易理解,因为模板比PHP更容易阅读

我走对了吗:我应该使用JSON细枝模板而不是一般的JSON编码吗

编辑(同时回到牧场)

发布此问题后,我的研究表明:

Twig JSON模板与JSON_编码

  • 将消除对JMSSerializer的需求,而不是非法获取 受保护的对象属性
  • 更具可读性/可预测性,特别是对于另一端的Javascript人员
  • Twig将检查变量是否存在,如果JSON不能立即标记 匹配预期格式,例如对象已更改。那就这样吧 很难打破Javascript和PHP之间的友谊
  • 单元测试也可以这样做(并且可以验证值),但可以在以后添加
  • 将内部对象与外部接口分离意味着作为一种模式,我们避免了关于json_编码或JMSerializer如何形成json的任何不必要的细节。让我作为一个人完全控制JSON的输出
  • 将比json_encode()慢
  • “我会避免使用模板来呈现数据,因为转义数据等的责任就在模板中,”他说
  • 意味着大量执行{variable_name | json_encode | raw}}:参见(raw意味着关闭自动转义)
  • “不管怎样,只返回JSON数据作为控制器的响应更有效,因为Symfony不需要进行模板化阶段,”他说

如果您担心的是合同的缺失,那么也许您应该编写一个单元测试。它可以更进一步,因为您还可以对属性的值进行约定,这样做。

如果您担心的是缺少约定,那么您可能应该编写一个单元测试。它可以更进一步,因为您还可以就属性的值签订合同,这样做。

这是一个很好的建议。我已经读过Symf2关于单元测试的书,但还没有实现。我可以看出这将强制执行合同,但我的问题是,更可取的模式是什么。使用隐式格式从控制器中释放JSON可以吗?是否有更好的原因,例如执行速度?或者是一个明确的“这个PHP总是会产生这个JSON”更清晰易读,因此更好吗?我明白了。。。我认为如果你想分离关注点,如果你想视图独立于你的模型,你应该使用一个模板。你应该使用
json\u encode
当且仅当视图应该在模型更改时立即更新。这是一个很好的建议。我已经读过Symf2关于单元测试的书,但还没有实现。我可以看出这将强制执行合同,但我的问题是,更可取的模式是什么。使用隐式格式从控制器中释放JSON可以吗?是否有更好的原因,例如执行速度?或者是一个明确的“这个PHP总是会产生这个JSON”更清晰易读,因此更好吗?我明白了。。。我认为如果你想分离关注点,如果你想视图独立于你的模型,你应该使用一个模板。当且仅当视图应在模型更改后立即更新时,才应使用
json\u encode
。Adam-我建议将问题中的“应”改为更具体的内容“应该”取决于谁在回答,很可能会就一大堆问题展开辩论。亚当——我建议将你问题中的“应该”改为更具体的问题“应该”取决于谁在回答,而且很可能会就一大堆问题展开辩论。