Создание моего первого расширения 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 доступным для моей базы.хмтл.файл прутика?

548   2  

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

    Ничего не найдено.