Render template from twig extension Render template from twig extension symfony symfony

Render template from twig extension


You can define the extension so that it needs the environment. Twig will automatically pass it to the function.

use Twig\Environment;use Twig\TwigFunction;public function getFunctions(){    return [        new TwigFunction(            'myfunction',            [$this, 'myFunction'],            ['needs_environment' => true]        ),    ];}public function myFunction(Environment $environment, string $someParam){    // ...}

For older versions of 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){    // ...}


Using this function the user can pass the twig environment instance to a twig extension

private $environment;public function initRuntime(\Twig_Environment $environment){    $this->environment = $environment;}


@tvlooy answer give me a hint but didn't work for me. What I needed to to to achieve it is:

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');    }}

I needed addtionaly add 'is_safe' => ['html'] to avoid autoescaping of HTML.

I've also registered the class as symfony service:

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

in TWIG template I've added {{ myMenu() }}

I work with "twig/twig": "~1.10"and Symfony 3.1.3 version