2014-11-21 83 views
0

我是symfony2的新手,我正在尋找解決方案來創建呈現樹枝文件的事件。在symfony2中創建事件以渲染樹枝文件

假設我們有一個基本模板

<!DOCTYPE html> 
<html> 
<head> 
    {% block meta %}{% endblock %} 
    <title>{% block title %}Welcome!{% endblock %}</title> 
    {% block stylesheets %}{% endblock %} 
</head> 
<body data-cachetime="{{ cacheTimeStamp() }}"> 
    {% block header %}{% endblock %} 
    <div id="content"> 
     <div class="container"> 
      {% block content %}{% endblock %} 
     </div> 
    </div> 
    {% block footer %}{% endblock %} 
    {% block version %}{% endblock %} 
    {% block javascripts %}{% endblock %} 
    {% block trackers %}{% endblock %} 
</body> 
</html> 

正如你所看到的,我有一個「版本」塊。我創建了一個從文件讀取版本的VersionBundle。版本樹枝模板

{% block version %} 
    <div id="version"><p>Version: {{ versionString() }}</p></div> 
{% endblock %} 

調用一個「ViewHelper」(我來自Zend ;-)),它從VersionBundle調用該函數。但現在是棘手的部分: VerionBundle只在AppKernel中註冊'開發'和'測試'環境。 這就是爲什麼我創建'版本'塊,而不是直接在基本的樹枝文件中調用ViewHelper。

但我不知道如何創建一個事件來渲染版本樹枝模板,因此數據將傳遞到基樹枝。

+0

我不明白你爲什麼稱之爲'事件'。你爲什麼不把這個帶有版本信息的div塊添加到你的基本模板中?你究竟需要什麼? – Alex 2014-11-21 07:25:54

+0

我不想問基地模板中的環境,並決定是否渲染版本塊或不... 在「在線」我沒有註冊捆綁軟件,所以versionString()不可用...這就是爲什麼我正在使用版本塊...我想避免錯誤/警告 Zend具有相同的函數稱爲佔位符... – torsten 2014-11-21 07:33:44

回答

0

我可能會改變你嘗試這樣做的方式,使用更多的Symfony特性並避免像「助手」那樣定義Zend。將Twig保持爲最小值是一個很好的經驗法則,只需從模板接收的數據呈現視圖即可。

首先,在parameters_dev.ymlparameters_test.yml文件(在app/config)中定義version變量。例如:

parameters: 
    version: 32 

將其定義爲version: ~parameters.yml

讓所有枝條可用模板這個變量在app/config/config.yml文件:

twig: 
    globals: 
     version: %version% 

然後,在你version塊定義,請執行以下操作:

{% block version %} 
    {% if version is not null %} 
     <div id="version"><p>Version: {{ version }}</p></div> 
    {% endif %} 
{% endblock %} 

希望它能幫助!

+0

這看起來很簡單(什麼是好的)。只有一個問題,它不是便攜式的。如果我在我的其他項目中使用它,我必須將所有時間(確定,這不是很多)代碼塊粘貼到每個項目。 – torsten 2014-11-21 08:32:28

+0

你的意思是完全不同的項目嗎? (不是相同的Symfony實例,不同的Symfony應用程序和捆綁然後 – 2014-11-21 08:45:24

+0

正確,構建模塊化包以重新使用沒有直接依賴關係的代碼... – torsten 2014-11-21 12:15:41