Symfony:如何处理常见的请求范围数据

时间:2016-11-01 12:25:05

标签: symfony event-handling twig requestscope

我将旧版PHP项目(pre-OO)迁移到Symfony2。在每次请求时我都要:

  • 计算一些动态数据(取决于当前日期和/或某些请求参数)
  • 在呈现的响应中使用该数据(多次!)。

一种天真的方法是:

  • 在每个控制器方法的开头,调用一些全局辅助函数来计算数据。
  • 在每个控制器方法结束时,将数据作为参数传递给树枝模板。

听起来乏味。也许最好是:

  • 为请求事件创建订阅者,该请求事件在请求进入时计算数据并通过getter方法提供对它的访问。
  • 将订阅者/服务定义为config.yml中的全局树枝变量。
  • 在twig模板中,根据需要调用该服务上的getter方法。

这可行吗? 特别是,枝条变量/服务和订户总是相同吗?或者该服务可以是新创建的实例吗?

这是某种滥用吗?或者这种用例是否有官方推荐的方式?

编辑不仅每个树枝模板都需要这些数据,但在某些控制器中也是如此。

1 个答案:

答案 0 :(得分:0)

在每个Controller-Action中调用特定方法确实是一个糟糕的解决方案。您使用订户的解决方案也不完美。

如果不详细了解您的用例,很难找到合适的方法。 也许一种方法是编写一个Twig-Extension并将一个服务注入到这个扩展中。服务将通过依赖注入获取请求堆栈并计算相关数据。然后,您可以在渲染过程中通过Twig-Extension“按需”访问此数据 另一种方法可能是在呈现期间使用子请求(Symfony: How to handle common request scope data

也许这些提示已经对你有所帮助。否则,请让我了解更多详细信息,在渲染过程中您需要数据的位置/方式。