使用新功能扩展Twig。我可以访问现有功能吗?

时间:2013-03-29 15:19:58

标签: symfony twig

我正在使用此扩展Twig:

namespace Acme\Bundle\MyBundle\Twig;

use Twig_SimpleFunction;

class LinkGenerator extends \Twig_Extension
{

    public function getFunctions() {

        return array(
            new Twig_SimpleFunction('link', function($param) {
                return "TEST " . $param;
            })
        );

    }

    public function getName() {

        return "link";

    }

}

工作正常。使用{{link(2)}}返回'TEST 2'。

出于演示目的,我想简单地将查询sting?link = 1附加到使用'url'Twig函数时会呈现的内容。

所以代码可能如下所示:

new Twig_SimpleFunction('link', function($param) {

    //render exactly how this would look if using the Twig 'url' function
    $url = $this->runFunction('url', $params);

    //append the query string
    $url .= "?link=1";

    return $url;

})

1 个答案:

答案 0 :(得分:1)

您可以配置DIC以将依赖项注入到您的Twig扩展中。

我会尝试注入Symfony2的TwigBundle提供的RoutingExtension类。


(未测试的)

DIC配置:

<service id="my.link_generator.twig.extension" class="Path\To\My\Templating\Twig\LinkGeneratorExtension">
    <argument type="service" id="twig.extension.routing"/>
    <tag name="twig.extension" />
</service>


LinkGeneratorExtension.php

class LinkGenerator extends \Twig_Extension
{
    protected $routingExt;

    public function __construct(RoutingExtension $routingExt)
    {
        $this->routingExt = $routingExt;
    }

    public function getLink($foo)
    {
        // ...
        $this->routingExt->getUrl(...);
    }
}