Я переписывания нашей компании веб-сайт в CakePHP, и нужно найти способ сделать следующее:Работа с Alias, URL-адреса в CakePHP
- пользователь вводит наш сайт, используя один из рекламных псевдонимами URLS что было pregenerated для конкретного медиа объявлений (журнала, веб продвижения и т.д.)
- URL-адрес проверяется против базы данных псевдонимов URL, и если псевдонима существует, то конкретный код отслеживания записывается в сеанс.
Я рассмотрел несколько вариантов, ни один из которых не подходит для этой цели. К ним относятся:
- Ввод сценария подстановки в beforeFilter() в AppController, так , что его включенную в каждом контроллера. (Записывает значение сеанса так это только один раз подойдет как.)
- Эта опция работает только для существующих contollers, и выдает ошибку Cake «отсутствует контроллер» если URL не существует.
- Конкретные маршруты для каждого псевдонима в routes.php - работает, но есть потенциально сотни псевдонимов URLs добавлять/удалять регулярно через интерфейс администратора.
- Направляйте все URL-адреса сайтов на свои собственные действия и имея правило «все else», для URL-адресов псевдонимов, которые сопоставляется с моим скриптом поиска. - Messy и я теряю встроенный пирог маршрутизации.
- Custom 404. - Я не хочу вернуть 404 для этих адресов, так как я чувствую свою плохую практику, если они не действительно не соответствуют ни на чем.
Я действительно мог бы сделать с местом в потоке приложения, где я могу поместить этот скрипт поиска/отслеживания, и я довольно новичок в тортике, поэтому я в тупике.
EDIT: Кроме того, я знаю, что подпапка, называемая «promo», легко сделает это, но у меня много старых URL-адресов с нашего старого сайта, которые тоже нуждаются в обработке.
Вам не нужно указывать маршруты каждого контроллера, вам просто нужно указать каждый контроллер - например '/ my_controller /: action /' – gnud
gnud, можете ли вы отправить пример маршрута, пожалуйста? Я не уверен в синтаксисе. Благодарю. –
Попробуйте Router :: connect ('/ mycontroller /: action/*', array ('controller' => 'mycontroller')); Имейте в виду, что теперь вам нужно указать действие для маршрута, которое нужно выполнить, просто перейдите в/mycontroller/не будет работать (IIRC) – gnud