Symfony:如何处理常见的请求范围数据
Symfony: How to handle common request scope data
我正在将遗留 PHP 项目(面向对象之前)迁移到 Symfony2。对于每个请求,我必须:
- 计算一些动态数据(取决于当前日期and/or一些请求参数)
- 在呈现的响应中使用该数据(多次!)。
一个天真的方法是:
- 在每个控制器方法的开始,调用一些全局辅助函数来计算数据。
- 在每个控制器方法的末尾,将数据作为参数传递给 twig 模板。
听起来很乏味。也许这样会更好:
- 为请求事件创建一个订阅者,它在收到请求时计算数据并通过 getter 方法提供对数据的访问。
- 将 subscriber/service 定义为
config.yml
中的全局 twig 变量。
- 在 Twig 模板中,根据需要对该服务调用 getter 方法。
可行吗?
特别是,树枝 variable/service 和订阅者是否总是相同的?或者该服务可以是新创建的实例吗?
这是某种滥用吗?或者对于这种用例是否有官方推荐的方法?
编辑 不仅每个树枝模板都需要数据,某些控制器也需要数据。
在每个 Controller-Action 中调用特定方法确实是一个糟糕的解决方案。您使用订户的解决方案也不完美。
在不详细了解您的用例的情况下,很难找到合适的方法。
也许一种方法是编写 Twig-Extension 并将服务注入到该扩展中。该服务将通过依赖注入获取请求堆栈并计算相关数据。然后,您可以在渲染期间通过 Twig-Extension "on demand" 访问此数据。
另一种方法可能是在渲染期间使用子请求 ()
也许这些提示已经对您有所帮助。否则让我知道更多细节,在渲染过程中在哪里/如何需要数据。
我正在将遗留 PHP 项目(面向对象之前)迁移到 Symfony2。对于每个请求,我必须:
- 计算一些动态数据(取决于当前日期and/or一些请求参数)
- 在呈现的响应中使用该数据(多次!)。
一个天真的方法是:
- 在每个控制器方法的开始,调用一些全局辅助函数来计算数据。
- 在每个控制器方法的末尾,将数据作为参数传递给 twig 模板。
听起来很乏味。也许这样会更好:
- 为请求事件创建一个订阅者,它在收到请求时计算数据并通过 getter 方法提供对数据的访问。
- 将 subscriber/service 定义为
config.yml
中的全局 twig 变量。 - 在 Twig 模板中,根据需要对该服务调用 getter 方法。
可行吗? 特别是,树枝 variable/service 和订阅者是否总是相同的?或者该服务可以是新创建的实例吗?
这是某种滥用吗?或者对于这种用例是否有官方推荐的方法?
编辑 不仅每个树枝模板都需要数据,某些控制器也需要数据。
在每个 Controller-Action 中调用特定方法确实是一个糟糕的解决方案。您使用订户的解决方案也不完美。
在不详细了解您的用例的情况下,很难找到合适的方法。
也许一种方法是编写 Twig-Extension 并将服务注入到该扩展中。该服务将通过依赖注入获取请求堆栈并计算相关数据。然后,您可以在渲染期间通过 Twig-Extension "on demand" 访问此数据。
另一种方法可能是在渲染期间使用子请求 (
也许这些提示已经对您有所帮助。否则让我知道更多细节,在渲染过程中在哪里/如何需要数据。