2017-01-11 3 views

ответ

14

В Twig 2.0 {{ import }} «ред макросы не наследуется дочерними шаблоны больше, см https://github.com/twigphp/Twig/issues/2336

Решения: Вам необходимо импортировать нужный макрос (ы) в каждом отдельном файле .twig.

Если ошибка отображается в строке, содержащей {{ include }} или {{ extends }}, вам необходимо заглянуть в шаблон, который включен/добавлен, и импортировать макрос там.

0

Если у вас есть много файлов Twig, использующих ваши макросы, может быть проще и меньше ошибок, чем определить глобальные функции Twig через a Twig Extension. Таким образом, вам не нужно импортировать макросы в каждый файл (который, вероятно, будет исправлен в будущей версии Twig).

Например, когда я был

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

теперь я определил в качестве расширения Twig называется 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 Macros должны быть эквивалентом функций PHP. Конечно, это должно быть адаптировано к вашим потребностям.

 Смежные вопросы

  • Нет связанных вопросов^_^