【问题标题】:Add the same calculated property to every Symfony2 Controller in bundle将相同的计算属性添加到捆绑包中的每个 Symfony2 控制器
【发布时间】:2013-09-10 16:01:11
【问题描述】:

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

served by appserver3 in 200ms

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

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

// 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 方法。)

这似乎有很多copypasta,而我迁移到 Symfony2 的全部原因是为了避免这种情况:\

【问题讨论】:

  • 为什么不删除这条消息?不是每个用户都想阅读的消息^^
  • 我认为这与问题无关。消息并不重要,但实现这一点的一般技术是我真正感兴趣的。
  • 如果你想在所有模板文件中包含一些代码,你应该把它放在模板层次结构顶部的树枝文件中。很多时候这是 app/Resources/views/base.thml.twig

标签: php symfony controller twig


【解决方案1】:

解决方案 1

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

请参阅文档中的Embedding Controllers

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

解决方案 2

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

twig:
     globals:
         appserver: "%appserver%"

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

serverd from {{ appserver }}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-23
    • 2018-05-20
    相关资源
    最近更新 更多