С момента обновления до Twig 2.0 я получаю сообщение об ошибке Accessing Twig_Template attributes is forbidden
. Связанная строка содержит либо {{ include }}
, либо макрокоманду.Сообщение об ошибке Twig 2.0 «Доступ к атрибутам Twig_Template запрещен»
ответ
В Twig 2.0 {{ import }}
«ред макросы не наследуется дочерними шаблоны больше, см https://github.com/twigphp/Twig/issues/2336
Решения: Вам необходимо импортировать нужный макрос (ы) в каждом отдельном файле .twig.
Если ошибка отображается в строке, содержащей {{ include }}
или {{ extends }}
, вам необходимо заглянуть в шаблон, который включен/добавлен, и импортировать макрос там.
Если у вас есть много файлов 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. Конечно, это должно быть адаптировано к вашим потребностям.