Symfony2树枝覆盖默认路径功能


Symfony2 Twig overriding default path function

我需要一种方法来覆盖树枝中的基本路径()函数。

我已经有了一个分支扩展,但是在那里定义一个路径过滤器并没有为我做到这一点。

扩展默认的路由扩展类。

use Symfony'Bridge'Twig'Extension'RoutingExtension;
class MyRoutingExtension extends RoutingExtension
{
    public function getPath($name, $parameters = array(), $relative = false)
    {
        //some code
    }
}

然后使用参数指定你的类:

parameters:
    twig.extension.routing.class: MyNamespace'MyRoutingExtension

======================================================================

要注入更多的依赖,比如域,你基本上需要复制服务定义,然后添加你的东西:

# services.yml
twig.extension.routing:
    class: '%twig.extension.routing.class%'
    public: false
    arguments: 
      - '@router'
      - 'domain'
class MyRoutingExtension extends RoutingExtension
{
    protected $domain;
    public function __construct($router,$domain)
    {
        parent::__construct($router);
        $this->domain = $domain;
    }
}

您还可以从DependencyInjection扩展内部向服务定义添加参数。这可能比复制服务定义更健壮一些。如果symfony更新了,定义可能会发生变化,这种风险始终存在。不太可能的。我手边没有例子。

顺便说一下,你应该避免在现有的问题上添加问题。