2017-01-11 76 views

回答

14

在枝杈2.0 {{ import }}「編輯宏沒有繼承到子模板了,看到https://github.com/twigphp/Twig/issues/2336

解決方案:你需要在每一個.twig文件導入所需的宏(S)。

如果錯誤顯示含有{{ include }}{{ extends }}行了,你要看看交代所包含/擴展模板,並導入宏在那裏。

0

如果你有很多使用你的宏的Twig文件,它可能更容易和更容易出錯定義全局小枝函數a Twig Extension。這樣你就不需要在每個文件中導入宏(這可能會在將來的Twig版本中修復)。

舉例來說,當我有

{% macro error(message, dismissible=true) %} 
    {# Error display code #} 
{% endmacro %} 

我現在已經在一根樹枝擴展所定義的所謂UtilitiesExtension以下功能:

public function getFunctions() 
    { 
     return array(
      // ... 
      new \Twig_SimpleFunction('error', array($this, 'error')), 
     ); 
    } 

    public function error($message, $dismissible = true) { 
     return $this->twig->render('patterns/utils/error.html.twig', [ 
      'text' => $message, 
      'limit' => $dismissible, 
     ]); 
    } 

然後,您需要更換與函數名的宏調用;請注意,您不能在函數名稱中使用點。

該解決方案非常乾淨,因爲Twig宏被認爲是PHP函數的等價物。當然這應該適應您的需求。