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' が返されます。

デモの目的で、'url' Twig 関数を使用した場合にレンダリングされるものにクエリ文字列 ?link=1 を単純に追加したいと思います。

したがって、コードは次のようになります。

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

Twig 拡張機能に依存関係を挿入するように DIC を構成できます。

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 に答える