2014-05-08 79 views
1

我想將Twig宏的集合分解爲單個文件,然後使用庫文件導入它們以收集所有導入語句。模塊化宏組織的嵌套樹枝導入

目前我們所有的宏都在一個文件中,但我寧願看到這樣的事情:

宏/ hello.twig

{% macro hello() %} 
    Hello 
{% endmacro %} 

宏/ goodbye.twig

{% macro goodbye() %} 
    Goodbye 
{% endmacro %} 

macro_lib.twig

{% import "macro/hello.twig" as hello %} 
{% import "macro/goodbye.twig" as goodbye %} 

的基本模板應該只是導入macro_lib.twig,但這不起作用:

{% import "macro_lib.twig" as lib %} 
{{ lib.hello.hello() }} 

但試圖調用嵌套宏返回Fatal error: Call to undefined method __TwigTemplate_d7...30::gethello()

我也試着像{% from "macro/hello.twig" import hello as hello %}命名空間,但進口那些也失敗了。

是否可以像這樣嵌套導入的宏?

+1

你好,我今天面臨同樣的問題......你最終得到了一個(固體)解決方案嗎?我嘗試使用_self,但它並沒有幫助..':(' – Stphane

回答

0

我認爲你需要在macro_lib.twig定義宏爲

{% macro lib() %} 
    {% import "macro/hello.twig" as hello %} 
    {% import "macro/goodbye.twig" as goodbye %} 
{% endmacro %} 

然後你就可以調用子宏

{% import "macro_lib.twig" as lib %} 
{{ lib.hello.hello() }} 

因爲macro_lib.twig你是剛子宏和您的容器需要在裏面定義一個宏以便能夠使用它

+0

這是行不通的,我仍然得到致命的'未定義的方法'錯誤尋找'gethello()' – joemaller

+0

你試過'{{lib。 hello()}}'? – Javad