Создание моего первого расширения twig для предоставления глобальных переменных базовым шаблонам
Мне нужно заполнить переменную некоторым HTML-кодом и сделать ее доступной для моей базы.формат html.напильник на прутик.
Чтобы достичь этого, я сделал расширение ветки. Это мой первый раз, когда я использую расширение ветки, поэтому я не уверен, что это правильный способ делать вещи.
Вот что у меня есть до сих пор:
Код расширения:
class GlobalFooterExtension extends Twig_Extension
{
public function getFilters()
{
return array(
new Twig_Filter_Function('GlobalFooter', array($this, 'GlobalFooter')),
);
}
public function GlobalFooter()
{
$GlobalFooter = file_get_contents('http://mysite.co.uk/footer/footer.html.twig');
return $GlobalFooter;
}
public function getName()
{
return 'GlobalFooter_extention';
}
}
Конфиг.yml:
services:
imagine.twig.GlobalFooterExtension:
class: ImagineGdmBundleTwigGlobalFooterExtension
tags:
- { name: twig.extension }
База.формат html.прутик:
{{GlobalFooter}}
Это дает следующее Ошибка:
Twig_Error_Runtime: Variable "GlobalFooter" does not exist in "ImagineGdmBundle:Default:product.html.twig" at line 2
Я уверен, что упускаю что-то действительно очевидное. Как сделать $GlobalFooter из моего класса GlobalFooterExtension доступным для моей базы.хмтл.файл прутика?
2 ответов:
Вы хотите задать глобальную переменную, а не функцию.
Просто используйте
getGlobalsи верните переменную:class GlobalFooterExtension extends \Twig_Extension { public function getGlobals() { return array( "GlobalFooter" => file_get_contents('http://mysite.co.uk/footer/footer.html.twig'), ); } public function getName() { return 'GlobalFooter_extention'; } }Или, если вы хотите лениво загрузить значение переменной, создайте функцию и измените шаблон на:
{{ GlobalFooter() }}
Кроме того, если файл нижнего колонтитула находится на том же сайте, лучше использовать
{% include '...' %}тег.
Переименовать функцию
getFiltersв getFunctions
Comments