2011-02-05 2 views
0

Эй. Я собирался создать «текущий» класс для моего компонента меню, который создает меню. Чтобы узнать текущий класс, было предложено использовать $this>getContext()->getRouting()->getCurrentRouteName();. Для этого мне пришлось настроить маршруты для всех элементов меню, которые будут существовать.Что не так с этим маршрутом?

Допустим, у меня есть два элемента до сих пор, один для главной страницы, один для клиента. Всякий раз, когда я просматриваю главную страницу, важно, какие действия и параметры, я хотел бы, чтобы приведенный выше код возвращал «главную страницу». То же самое касается клиента.

Мое правило для клиента в настоящее время, заключается в следующем: routing.yml

 
customer: 
    param: { module: customer } 

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

Как связать:

 
if ($current == $name){ 
    echo link_to($name, $link, array("class" => "selected")); 
}else { 
    echo link_to($name, $link); 
} 

ссылки ($ Link), что в настоящее время идут в "клиент/some_action" не работает, они появляются, как только "/". Поэтому я думал использовать url_for вокруг ссылки $, которая тоже не сработала, тот же результат.

Должно быть что-то не в порядке с правилами моей маршрутизации ... Потому что, когда я вхожу, давайте скажем/клиент/новый вручную, я вижу страницу. Если я из шаблона напишу $this>getContext()->getRouting()->getCurrentRouteName();, он говорит по умолчанию. Так что мое правило определенно не работает вообще. Я тоже пробовал другие правила, но у меня никого не было. Хитрость заключается в том, чтобы сделать одно правило, которое работает на что угодно под клиентом модуля.

И да, я очищаю свой кеш после изменения каждого из моих правил.

Большое спасибо.

EDIT: Я применил правила маршрутизации, но не для всех действий в рамках модуля клиента. Я должен делать правила для каждого действия. Но ссылки все еще сломаны, они показывают «/».

Мои новые правила:

 
customer_index: 
    url: /:module 
    param: { module: customer, action: index } 

customer_new: 
    url: /:module/:action 
    param: { module: customer, action: new } 

Ни одна из этих ссылок не работает: echo link_to("Customers", "@customer_index", array("module" => "customer"));

echo link_to("New customer", "@customer_new", array("module" => "customer"));

ответ

1

Да, это то, как я сделал это несколько раз, а также. Для использования getCurrentRouteName() нужны отдельные правила маршрутизации.

Проблема, с которой вы связаны, заключается в том, что вы не можете передать параметр «module» таким образом. Это неверный параметр для Symfony link_to() helper. Вместо этого, вы можете передать это следующим образом:

link_to('Customers', '@customer_index?url_variable=something'); 

customer_index: 
    url: /:url_variable 
    param: { module: customer, action: index, url_variable: some_default_value } 

Значение по умолчанию является необязательным, но помощник link_to выдаст ошибку, если вы не передаете переменную и маршрут не имеет значения по умолчанию для него ,

Кроме того, просто указывают на это, как вы получили это дважды неправильно в вашем коде выше:

$this>getContext()->getRouting()->getCurrentRouteName(); 
...should be: 
$this->getContext()->getRouting()->getCurrentRouteName(); 
Смежные вопросы