【问题标题】:Symfony2 Twig overriding default path functionSymfony2 Twig 覆盖默认路径功能
【发布时间】:2014-05-30 15:28:02
【问题描述】:

我需要一种方法来覆盖 twig 中的基本 path() 函数。

我已经有一个 twig 扩展,但是在那里定义一个路径过滤器对我没有用。

提前致谢。

【问题讨论】:

    标签: php symfony twig


    【解决方案1】:

    扩展默认路由扩展类。

    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 更新,定义可能会改变的风险总是存在的。不太可能。我碰巧没有一个方便的例子。

    顺便说一句,您应该避免在现有问题中添加问题。一些反对的选民会持悲观态度。

    【讨论】:

    • 非常好,正是我需要的。如果您不介意,还有一个问题:如何在此处注入当前域?
    • 更新了答案以显示如何注入更多信息。
    • 不敢相信我没有想到这一点。我一定筋疲力尽了。谢谢大佬。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-27
    • 1970-01-01
    • 2011-12-19
    • 1970-01-01
    • 2012-07-26
    • 1970-01-01
    相关资源
    最近更新 更多