0

我正在使用这个扩展 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”。

出于演示目的,我想简单地将查询字符串 ?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;

})
4

1 回答 1

1

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

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


(未经测试)

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(...);
    }
}
于 2013-03-29T15:39:43.113 回答