交响乐团 : Overriding Twig's routing path function

标签 symfony symfony4

在 Symfony2 中,重写 RoutingExtension 非常简单,我可以注入(inject)一些额外的参数。

我正在使用动态域路由到应用程序的不同部分。

{subdomain}.domain.com

但是,我不想每次在 twig 中调用路径或 url 时都必须指定子域。

我可以创建自己独特的过滤器名称,但我不愿意。

以前,我们可以将其放入 services.yaml 文件中,它就可以工作。

services:
    twig.extension.routing:
        class: AppBundle\Twig\Extension\RoutingExtension
        public: false
        arguments:
          - '@router'
          - '@request_stack'
          - '%domain%'

Symfony2 Twig overriding default path function

使用 Symfony Flex,我得到的只是无法注册扩展“App\TwigExtension\TwigRoutingExtension”,因为它已经注册了。

最佳答案

这是如何使用 AbstractExtension 在 Symfony 5.x 中覆盖 Twig 的路由路径/url 函数:

namespace App\Twig;

use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
use Twig\Extension\AbstractExtension;
use Twig\TwigFunction;

class MyRoutingExtension extends AbstractExtension
{
    public function __construct(
        private UrlGeneratorInterface $generator
    ){}

    public function getFunctions(): array
    {
        return [
            new TwigFunction('path', [$this, 'getPath']),
            new TwigFunction('url', [$this, 'getUrl']),
        ];
    }

    public function getPath(string $name, array $parameters = [], bool $relative = false): string
    {
        return $this->generator->generate($name, $parameters, $relative ? UrlGeneratorInterface::RELATIVE_PATH : UrlGeneratorInterface::ABSOLUTE_PATH);
    }

    public function getUrl(string $name, array $parameters = [], bool $schemeRelative = false): string
    {

        return $this->generator->generate($name, $parameters, $schemeRelative ? UrlGeneratorInterface::NETWORK_PATH : UrlGeneratorInterface::ABSOLUTE_URL);
    }
}

关于交响乐团 : Overriding Twig's routing path function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54495546/

相关文章:

php - Symfony 中多个地址的一种形式 - Twig

php - 带有原型(prototype)的 Symfony 4 表单集合

php - 根据 Doctrine 进行迁移时出错

实体中的 Symfony 4 Autowiring 不起作用

symfony - 处理查询字符串?

php - 无法使用 composer 在 laravel 中安装 PHP-FFMpeg/PHP-FFMpeg 库

symfony - 在 Laravel 4 中使用 CssSelector

php - Symfony 从路由中删除前三个字符

php - Symfony 控制台 : Confused about services

symfony - EasyAdminBundle : Validation not working on CKEditorType