2013-03-29 83 views
0

我使用這個擴展的樹枝:用新功能延伸枝條。我可以訪問現有的功能嗎?

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'。

爲了演示的目的,我想簡單地將query 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

可以配置DIC到您的樹枝延伸到注入依賴。

我會嘗試注入由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(...); 
    } 
}