将相同的计算属性添加到bundle中的每个Symfony2 Controller

时间:2013-09-10 16:01:11

标签: php symfony controller twig

我正在将应用程序从遗留框架转换为Symfony2。该应用程序的一个功能是在呈现页面的底角有一条小小的消息,上面写着

served by appserver3 in 200ms

或类似的。它会根据您所使用的应用服务器以及提供请求所花费的时间而变化。 appserver的值在配置文件中设置(但这在很大程度上与此无关)。

我应该创建一个扩展BaseController的{​​{1}}类型类,然后让我的所有控制器扩展它吗?如果是这样,我将如何确保Controller始终将BaseControllerresponseTime添加到将传递给我的twig模板的变量列表中,而无需手动添加在这样的每个控制器中:

appServerName

(显然,这会假设我在// e.g. src/MyNamespace/MyBundle/Controller/AboutUsController.php return $this->render('MyNamespaceMyBundle:Default:index.html.twig', array('var1' => $var1, 'appServerName' => $this->getAppServerName(), 'responseTime' => $this->getResponseTime())); 中创建了getAppServerNamegetResponseTime方法。)

这看起来像很多copypasta,我转移到Symfony2的全部理由是为了避免这种情况:\

1 个答案:

答案 0 :(得分:1)

解决方案1 ​​

对于模板中的动态部件,尤其是从每个模板扩展的基本模板,您可以从控制器操作渲染输出。它就像twigs include但它包含返回的动态内容。

请参阅文档中的Embedding Controllers

输出服务的appserver非常简单。只需从容器中获取参数即可。计算加载时间可能是一项更复杂的任务,对用户来说并非真正必要。

解决方案2

如果您appserver中只配置了静态parameters.yml参数,则可以在config.yml中将其定义为树枝全局变量:

twig:
     globals:
         appserver: "%appserver%"

现在您可以将其包含在所需的树枝模板中:

serverd from {{ appserver }}