В 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..




В 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);
}
}
У меня нет теста, но IMO вам следует отправиться в тур с symfony.com/doc/current/service_container/…
Symfony\Bridge\Twig\Extension\RoutingExtension был помечен как "final" в SF 4.4, так что это больше не работает, так как мы больше не можем его расширять, есть идеи, как воспроизвести эту функциональность сейчас?