Что не так с этим маршрутом? - PullRequest
0 голосов
/ 05 февраля 2011

Эй.Я собирался создать «текущий» класс для моего компонента меню, который создает меню.Чтобы узнать текущий класс, было предложено использовать $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), которые теперь переходят к «customer / some_action», неработа, они отображаются как просто "/".Поэтому я решил использовать url_for вокруг ссылки $, которая тоже не работала, тот же результат.

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

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

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

РЕДАКТИРОВАТЬ: я заставил правила маршрутизации работать, но не для всех действий в модуле клиента.Я должен установить правила для каждого действия.Но ссылки все еще не работают, они показывают "/".

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

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 Ответ

1 голос
/ 05 февраля 2011

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

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

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();
...