将相同的计算属性添加到捆绑包中的每个 Symfony2 控制器


Add the same calculated property to every Symfony2 Controller in bundle

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

served by appserver3 in 200ms

或类似。它会根据您所在的应用服务器以及处理请求所花费的时间而变化。应用服务器的值是在配置文件中设置的(但这在这里基本上无关紧要)。

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

// 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()));

(显然,这将假设我在BaseController中创建了getAppServerNamegetResponseTime方法。

这似乎是很多复制面,我迁移到Symfony2的全部原因是为了避免这种情况:''

解决方案 1

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

请参阅文档中的嵌入控制器。

输出服务的应用程序服务器很容易。只需从容器中获取参数即可。计算加载时间可能是一项更复杂的任务,对用户来说并不是真正必要的。

解决方案 2

如果它只是parameters.yml中配置的静态appserver参数,则可以在config.yml中将其定义为 twig 全局变量:

twig:
     globals:
         appserver: "%appserver%"

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

serverd from {{ appserver }}