在 Symfony 中更改 Twig url() 输出

Change Twig url() output in Symfony

最终执行Twig url()函数的file/class是什么,就像这里:<a href="{{ url('app_home') }}">Home</a> in twig.

我知道我可以使用装饰器来更改功能,例如:

App\Services\MyRouter:
    decorates: 'router'
    arguments: ['@App\Services\MyRouter.inner']

public function generate($name, $parameters = [], $referenceType = self::ABSOLUTE_PATH)
{
    $name = 'test'.$name;

    return $this->router->generate($name, $parameters, $referenceType);
}

以上更改了影响其他区域的路线,例如加载控制器。

我所追求的是 twig 文档中的最终输出。我一直没能找到合适的装饰服务。

编辑

基于我一直在使用 twig.extension.routing 的答案,但现在我只得到一个“未知的“路径”函数。”例外。我的期望是什么都不会发生,而我的函数 returns 是原始方法。

App\Service\TwigUrlDecorator:
    decorates: 'twig.extension.routing'
    arguments: ['@App\Service\TwigUrlDecorator.inner']
    public: false

<?php
// src/Service/TwigUrlDecorator.php

namespace App\Service;

use Twig\Extension\AbstractExtension;

class TwigUrlDecorator extends AbstractExtension
{

    public function getPath($name, $parameters = array(), $relative = false)
    {
        return parent::getPath($name, $parameters, $relative);
    }

}

url twig 函数由 Symfony\Bridge\Twig\Extension\RoutingExtension::getUrl() 执行。

您可以找到 class 定义 here, and the specific method here. The service is defined here,其中您可以看到服务名称是 twig.extension.routing

我想你可以装饰扩展,但考虑到它是多么简单,它可能更简单 define your own URL generating twig function by defining a new Twig Extension