在 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。
最终执行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。