Вы также можете сделать это с помощью правил перезаписи. Правило, как это в вашем конфигурационном файле:
'controller/<slug:[\w\-]+>'=>'controller/view',
будет принимать URL, как это:
controller/my-slug
и он будет перенаправлять на ActionView() в контроллере, и передать слизняка ("мой -slug ") в качестве переменной $ _GET. С этим правилом перезаписи теперь вызывается $ _GET ['slug'], и он вернет «my-slug» из URL-адреса.
У меня есть строка «slug» в качестве первичного ключа, поэтому я просто запрашиваю DB для $ _GET ['slug'] в моем actionView(), и я получаю правильную запись на основе URL. Работает как шарм. Удачи!
UPDATE Чтобы избавиться от префикса контроллера в дополнение к использованию slug, вам, вероятно, понадобится одна большая таблица для отслеживания всех URL-адресов (чтобы предотвратить дублирование). Если у вас есть это, вы можете сделать пару разных вещей:
1 Переопределите onBeginRequest, чтобы выполнить поиск в таблице мастер-слайдов, чтобы выяснить, какой контроллер вызывать. 2. Используйте мастер-переписать для одного ActionIndex в SiteController и в этом действии найдите пул в главной таблице, чтобы выяснить, какой контроллер/действие нужно отправить пользователю. Правило перезаписи будет выглядеть примерно так:
'<slug:[\w\-]+>'=>'site/index',
Спасибо, но, возможно, я не объяснил, что я имею в виду очень хорошо. я имею в виду, что в quora.com вы увидите, что вся страница, включая (тема, вопрос и имя пользователя), имеет slug после домена, и нет никакого параметра infront slug, чтобы вызвать контроллер и примеры действий для темы http: // www.quora.com/StackOverflow и для вопроса http: //www.quora.com/Why-doesnt-Quora-implement-a-reputation-system-a-la-StackOverflow, так как запрос продолжается? – tayler