2014-09-25 56 views
2

我學習symfony2並非常喜歡它(從ZendFramework 1.x遷移),但現在我被樹枝模板卡住了。你能指點我正確的方向嗎?如何從父包中擴展樹枝模板?

我的應用程序有很多客戶,每個客戶都有一些定製(主要是模板,還有控制器等)。

我嘗試通過綁定繼承來實現此目的/我創建了ClientBundle,它繼承了BaseBundle,它包含所有基本代碼和模板......它可以像我需要的所有基本模板一樣工作。當我在ClientBundle中創建模板時,它覆蓋了BaseBundle中的模板,我無法從ClientBundle模板訪問BaseBundle中的原始模板。我想擴展父模板,不覆蓋它...這是不可能的嗎?

謝謝!

回答

1

在extention樹枝模板中的標準命令是:

{% extends 'BaseBundle::yourTemplate.html.twig' %} 

你可能在你的孩子捆綁使用相同的名稱爲模板(你可能在你的這兩個父yourTemplate.html.twig和你的孩子捆綁使得子模板覆蓋父項)。在這種情況下,您可以重命名您的子模板(yourTemplate2.html.twig),然後從父級擴展子模板。更多關於捆綁繼承和樹枝模板的一些推廣: http://symfony.com/doc/current/cookbook/bundles/inheritance.html http://symfony.com/doc/current/book/templating.html

+0

是的,我想要模板是相同的名稱...如果我會改變名稱,我需要重寫也相應的行動,並更改模板...我正在尋找更優雅的東西。有一些解決方案嗎? – 2014-09-25 19:44:13

+0

即使您覆蓋模板,仍可以使用extend命令。您是否嘗試在您的子模板中包含{%extends ...%}行? – iiirxs 2014-09-25 19:50:30

+1

是的,我做了/它以包含循環結束。它不包括父模板,即使我在擴展中使用父包名:-( – 2014-09-25 19:57:19

3

使用標準的Symfony extends符號的致命錯誤引用父母的管束模板結果。 Symfony將您的模板參考BaseBundle解釋爲ChildBundle,作爲導致函數嵌套級別異常的bundle繼承的結果。

您可以直接使用下面的符號引用父的包模板文件:

{% extends "@Client/Foo/bar.html.twig" %} 

更換爲:

{% extends "ClientBundle:Foo:bar.html.twig" %} 

枝條的FilesystemLoader拆分參考串入命名空間(客戶端)和路徑(Foo/bar.html.twig)。名稱空間是沒有Bundle後綴的包名稱。每個名稱空間的完整路徑通過連接默認<bundle_path>/Resources/views/與提供的路徑來解決。

+1

這是正確的解決方案。需要虛擬/基本模板。 – ShiraNai7 2016-08-18 14:04:28