Визуализация шаблона из расширения ветки - PullRequest
15 голосов
/ 03 марта 2012

Я создал расширение ветки, чтобы сделать некоторые вещи, и одна из них - это рендеринг шаблона.Как я могу получить доступ из расширения ветки к среде движка и вызвать метод Render?

Ответы [ 3 ]

40 голосов
/ 15 декабря 2012

Вы можете определить расширение так, чтобы оно нуждалось в среде. Twig автоматически передаст его функции.

public function getFunctions()
{
    return array(
        new \Twig_SimpleFunction(
            'myfunction',
            array($this, 'myFunction'),
            array('needs_environment' => true)
        ),
    );
}

public function myFunction(\Twig_Environment $environment, string $someParam)
{
    // ...
}
19 голосов
/ 04 марта 2012

Используя эту функцию, пользователь может передать экземпляр среды ветки в расширение ветки

private $environment;

public function initRuntime(\Twig_Environment $environment)
{
    $this->environment = $environment;
}
7 голосов
/ 26 сентября 2016

@ tvlooy answer дай мне подсказку, но у меня не получилось. Чтобы добиться этого, мне нужно было:

namespace AppBundle\Twig;


class MenuExtension extends \Twig_Extension
{
    public function getName()
    {
        return 'menu_extension';
    }

    public function getFunctions()
    {
       return [
           new \Twig_SimpleFunction('myMenu', [$this, 'myMenu'], [
               'needs_environment' => true,
               'is_safe' => ['html']
           ])
       ];
    }

    public function myMenu(\Twig_Environment $environment)
    {
          return $environment->render('AppBundle:Menu:main-menu.html.twig');
    }
}

Мне нужно было добавить еще 'is_safe' => ['html'], чтобы избежать автоматического удаления HTML.

Я также зарегистрировал класс как службу Symfony:

app.twig.menu_extension:
    class: AppBundle\Twig\MenuExtension
    public: false
    tags:
      - { name: twig.extension }

в шаблоне TWIG, который я добавил {{ myMenu() }}

Я работаю с "twig/twig": "~1.10" и Symfony 3.1.3 версии

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...