簡體   English   中英

將相同的計算屬性添加到捆綁中的每個Symfony2 Controller

[英]Add the same calculated property to every Symfony2 Controller in bundle

我正在將應用程序從舊框架轉換為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()));

(顯然,這會認為我創建了getAppServerNamegetResponseTime在我的方法BaseController 。)

這似乎是很多copypasta的原因,而我轉向Symfony2的全部原因是為了避免這種情況:\\

解決方案1

對於模板中的動態零件,尤其是從每個模板擴展的基礎模板中的動態零件,您可以呈現控制器動作的輸出。 就像樹枝include但它包含返回的動態內容。

請參閱文檔中的嵌入控制器

輸出所提供的appserver很容易。 只需從容器中獲取參數。 計算加載時間可能是更復雜的任務,對用戶而言並不是真正必要的。

解決方案2

如果這只是一個靜態的appserver在您的配置參數parameters.yml你可以將其定義為在一個樹枝全局變量config.yml

twig:
     globals:
         appserver: "%appserver%"

現在,您可以將其包括在所需的樹枝模板中:

serverd from {{ appserver }}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM