Symfony Flex: переопределение функции пути маршрутизации Twig

В Symfony2 было просто переопределить RoutingExtension, чтобы я мог ввести некоторые дополнительные параметры.

Я использую динамический домен для маршрутизации к различным частям моего приложения.

{subdomain}.domain.com

Однако я не хочу указывать субдомен каждый раз, когда я вызываю путь или URL-адрес в twig.

Я мог бы создать свое собственное уникальное имя фильтра, но я бы не стал этого делать.

Раньше мы могли поместить это в файл services.yaml, и это работало.

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

Symfony2 Twig переопределяет функцию пути по умолчанию

С Symfony Flex я получаю только Unable to register extension "App\TwigExtension\TwigRoutingExtension" as it is already registered..

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Symfony Station Communiqué - 17 февраля 2023 г
Symfony Station Communiqué - 17 февраля 2023 г
Это коммюнике первоначально появилось на Symfony Station , вашем источнике передовых новостей Symfony, PHP и кибербезопасности.
Управление ответами api для исключений на Symfony с помощью KernelEvents
Управление ответами api для исключений на Symfony с помощью KernelEvents
Много раз при создании api нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
4
0
342
1

Ответы 1

В SF4 еще проще:

первый composer require symfony/twig-bundle twig/extensions

Обычно автопроводка включена, поэтому вы можете просто сделать:

<?php

namespace App\Twig;

use Symfony\Bridge\Twig\Extension\RoutingExtension;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;

class TestExtension extends RoutingExtension
{
    public function __construct(UrlGeneratorInterface $generator)
    {
        parent::__construct($generator);
    }

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

Если вы хотите настроить сервис, забудьте об определении аргументов, это скучно :). Предполагая, что ваш %domain% доступен в вашем параметре, сделайте что-то вроде этого:

<?php

namespace App\Twig;

use Symfony\Bridge\Twig\Extension\RoutingExtension;
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\Routing\RouterInterface;

class TestExtension extends RoutingExtension
{
    /** @var RouterInterface $router */
    protected $router;

    /** @var RequestStack $stack */
    protected $stack;

    /** @var mixed $domain */
    protected $domain;

    /**
     * TestExtension constructor.
     *
     * @param RouterInterface       $router
     * @param RequestStack          $stack
     * @param ParameterBagInterface $bag
     */
    public function __construct(RouterInterface $router, RequestStack $stack, ParameterBagInterface $bag)
    {
        $this->router = $router;
        $this->stack  = $stack;
        $this->domain = $bag->get('domain');
    }


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

Symfony\Bridge\Twig\Extension\RoutingExtension был помечен как "final" в SF 4.4, так что это больше не работает, так как мы больше не можем его расширять, есть идеи, как воспроизвести эту функциональность сейчас?

Zebratrois 18.02.2020 15:25

У меня нет теста, но IMO вам следует отправиться в тур с symfony.com/doc/current/service_container/…

GuillaumeL 27.02.2020 14:54

Другие вопросы по теме