2014-09-05 3 views
0

Допустим, что у меня есть следующие маршрутные аннотаций для действия контроллера:Как прокладывать маршруты, игнорируя дополнительные переданные параметры

* @Route("/post/{post_id}/", name="post.view") 
* @Route("/post/", name="post.current_view") 

И я хочу использовать веточку, чтобы создать URL для этого:

{{ url(basePath~'view', {'post_id':post.postId}) }} 
//basePath will either be "post." or "post.current_" 

Что я в настоящее время получаю:

domain.com/post/1/ 
domain.com/post/?post_id=1 

Что я хочу, хотя это для второй маршрут будет генерироваться ignori нг любые «EXTRA» переданные ей параметры, так что я бы только получить:

domain.com/post/ 

Кто-нибудь знает, если это то, что может быть изначально сделать? Я знаю, что могу направить пользовательскую функцию твига, которая использует маршрутизатор, а затем я могу генерировать маршруты и убирать строку запроса, но я хочу избежать этого, если есть легкий переключатель, который я пропустил.

ответ

1

Решение # 1 вы могли бы просто добавить, если пункт

{% if BasePath == 'post.' %} 
    {{ url(BasePath~'view', {'post_id':post.postId}) }} 
{% elseif BasePath == 'post.current_' %} 
    {{ url(BasePath~'view') }} 
{% endif %} 

может быть, не самый элегантный, но должен Работа.

Решение # 2

spliting URL с вопросительными знаками и получение первой строки

{% set myUrl = url(basePath~'view', {'post_id':post.postId}) %} 
{{ myUrl|split("?")|first }} 

Решение # 3 Или вы можете переопределить функцию URL-адрес, расширив RoutingExtension класс веточку.

Symfony\Bridge\Twig\Extension\RoutingExtension 

можно найти пример here с path но url должна быть одинаковой.

Вы должны переопределить эту функцию

public function getUrl($name, $parameters = array(), $schemeRelative = false) 
    { 
     return $this->generator->generate($name, $parameters, $schemeRelative ? UrlGeneratorInterface::NETWORK_PATH : UrlGeneratorInterface::ABSOLUTE_URL); 
    } 

вашей функции может выглядеть следующим образом:

public function getUrl($name, $parameters = array(), $schemeRelative = false) 
{ 
    $yourUrl = parent::getUrl($name, $parameters = array(), $schemeRelative = false); 
    return strstr($yourUrl, '?' , true); 
} 

, что идентификатор OES удаляет всю afther знака вопроса.

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

twig.extension.routing.class: MyNamespace\MyRoutingExtension 
+0

Не поклонник добавления, если заявления повсюду, но добавление '| щели («?») | First' до конца ссылок не слишком плохо – Chausser

0

Я думаю, нет, вам нужен preg_replace фильтр, и это изначально не определен

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