簡體   English   中英

從樹枝擴展渲染模板

[英]Render template from twig extension

我已經構建了一個樹枝擴展來做一些事情,其中​​之一是渲染模板。 如何從樹枝擴展內部訪問引擎環境並調用 Render 方法?

您可以定義擴展以使其需要環境。 Twig 會自動將它傳遞給函數。

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)
{
    // ...
}

對於舊版本的 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)
{
    // ...
}

使用此函數,用戶可以將 twig 環境實例傳遞給 twig 擴展

private $environment;

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

@tvlooy 回答給了我一個提示,但對我不起作用。 我需要實現它是:

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 版本

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM