Параметры маршрутов

У меня на сайте будет галерея, поделенная на несколько категорий. Я собираюсь обрабатывать все категории одним экшеном - gallery.php. Чтобы сделать урлы красивыми, я пытаюсь настроить urlManager так, чтобы урлы вида mysite.com/gallery/nature выглядели как mysite.com/nature. Для этого я пытаюсь передавать GET параметр, обозначающий категорию к gallery:


'<action:(people|animals|nature)>' => 'site/gallery?t=<action>'

Но таким образом GET почему-то не передается. В мануале я читал про подобное на примере get параметра "id", но в "route" я get параметра id почему-то не вижу:


'<_c:(post|comment)>/<id:\d+>/<_a:(create|update|delete)>' => '<_c>/<_a>',

Есть ли другие пути реализовать эту задачу?

Из вашего поста не понятно, где контроллер, где экшен, а где параметры. "По уму" должно быть так:

контроллер GalleryController имеет действие actionView, принимающее параметр $id (id галереи). Тогда правило будет таким:




'<id:\w+>'=>'gallery/view',



Здесь id - любая последовательность букв, и предполагается, что метод loadModel() в контроллере будет искать галерею в базе по этому значению.

У меня gallery - экшен контроллера site. Я не хочу делать отдельный контроллер галереи, потому что категории будут отличатся всего парой параметров, да и кроме отображения галереи он ничего делать не будет.

Как мне в actionView передавать/принимать id?

Про передачу параметров читайте тут.

Насчет отдельного контроллера. Это сегодня у вас в контроллере один метод, а завтра потребуются действия list, view, update, create, delete, ajax… Так ведь можно всё в SiteController уместить, и это всё равно будет MVC. Если не хотите дублировать какой-то код - создавайте компоненты, действия-классы и т.п. Кстати, с проблемой с маршрутами вы столкнулись именно по той причине, что не добавили отдельный контроллер галереи, а с ним всё было бы легко и последовательно. Но если желаете делать по-своему - приятных вам мучений :D

Передача параметров можешь понадобится и в каком-нибудь другом месте, например, site/about/contact. Не делать же ради этого контроллер about :)

Здесь контроллер site, а действие? actionAbout? Опять не ясно… Yii бы сделал такой url (если contact - значение параметра page): site/about/page/contact. Какой бы url вам хотелось видеть в итоге? Что плохого в контроллере AboutController, если это самостоятельный раздел сайта и он содержит подстраницы contact, history и т.д.? Его добавление никак не скажется на работе приложения. В небезызвестном расширении Yii-user есть отдельные контроллеры для логина/логаута, восстановления пароля и т.д., т.е. вся логика не сосредоточена в одном контроллере UserController. Я не говорю, что это расширение - образец для подражания, но иногда лучше не усложнять жизнь и себе, и другим :)