2016-03-09 6 views
1

Я делаю приложение в Symfony3. Часть приложения разделяется динамическими поддоменами --- субдомен представлен пули.Symfony, Twig: постоянные параметры маршрута

subdomains: 
    host: "{slug}.{domain}" 
    default: 
      slug: example 
    ... 

При запуске на локальном примере такого маршрута будет, например, http://a.localhost

Когда я создаю ссылку в Twig, либо с помощью {{ url('route') }} или {{ path('route') }}, подобласть всегда забыт и пробковые в paramenter падает по умолчанию примера, всегда делают маршруты http://example.localhost.

Есть ли способ, чтобы неявно копировать параметры или пометить некоторые параметры постоянными, так что я не должен делать все ссылки включают слизняк как этот {{ url('route', {'slug' : slug}) }}, чтобы остаться на поддомене?

Спасибо

+0

Что профайлер сказать bout «Параметры маршрута» на панели «Маршрутизация»? (/app_dev.php/_profiler/latest?panel=router) –

+0

@TobiasXy параметр slug указан как ожидалось в «Параметры маршрутизации» с параметрами * _locale * и * domain *. Дополнительная информация не предоставляется. –

ответ

2

Я создал TwigExtension с целью создания связей внутри подобласти.

Я бы предпочел, чтобы некоторые параметры были «настойчивыми», как я упоминал в вопросе. Они будут неявно переноситься через относительные пути, но, возможно, будут нулевыми с явным выбором параметров. Если это невозможно, я считаю этот вариант лучше, чем добавление параметра вручную и наилучшего варианта.

класс Extension

/** 
* ApplicationExtension constructor. 
* 
* @param Router $router 
* @param RequestStack $requestStack 
*/ 
public function __construct(Router $router, RequestStack $requestStack) 
{ 
    $this->router = $router; 
    $this->requestStack = $requestStack; 
} 

public function getFunctions() 
{ 
    return [ 
      new \Twig_SimpleFunction('domainPath', [ 
        $this, 
        'domainPath' 
      ]), 
    ]; 
} 

public function domainPath($route_name, $params = []) 
{ 
    if (!array_key_exists('slug', $params)) { 
     $params['slug'] = $this->requestStack->getCurrentRequest()->attributes->get('slug'); 
    } 
    return $this->router->generate($route_name, $params); 
} 

public function getName() 
{ 
    return 'application_extension'; 
} 

Регистрация службы (DI и Tag)

application.twig.application_extension: 
     class: ApplicationBundle\Twig\ApplicationExtension 
     arguments: ["@router", "@request_stack"] 
     public: false 
     tags: 
      - { name: twig.extension } 

Использование в шаблоне

{{ domainPath('route_name') }} 

 Смежные вопросы

  • Нет связанных вопросов^_^