Как сделать хорошую пользовательскую маршрутизацию с CakePHP? - PullRequest
1 голос
/ 08 августа 2011

Я планирую переписать свой сайт в CakePHP и, потратив целую неделю на его изучение, я все еще не уверен, как сделать хорошую настраиваемую маршрутизацию в CakePHP.

Это то, что я хочу:

  • Сохраните текущую структуру URL в www.domain.tld / en / dragons.html или используйте www.domain.tld / en / dragons, но не www.domain.tld / en / node/dragons.html.А также сможете использовать контроллеры с похожей структурой пути.

На всем сайте около 100 статических страниц.Я прочитал многоязычную маршрутизацию и думаю, что смогу это сделать.Я также могу сделать / en / * или / en /: slug route через PagesControler или самописный NodesController.

Моя проблема в том, что я хотел бы иметь возможность смешивать и сопоставлять URL с контроллерами и безтак что на самом деле я хочу, чтобы он проверял, является ли a: slug частью списка слагов, все равно должна быть возможность использовать этот URL с контроллером.

Я создал маршруты для обоих / en/ contact и / en /: slugid, но кажется, что все запросы были направлены на мой NodesController, даже когда я прямо сказал, что / en / contact должен быть направлен на ContactsController.

Как я могу поручить Cakephp сохранить мою текущую диктаторскую структуру?Я прочитал часть маршрутов в книге Cakephp, но она была очень короткой и заставила меня немного сомневаться в возможности такой маршрутизации.При необходимости я просто напишу php-код, который печатает все маршруты для всех слагов, так что я все еще могу писать маршруты контроллера с аналогичной структурой пути.

1 Ответ

0 голосов
/ 08 августа 2011

Если в webroot существует файл (т. Е. app/webroot/static.html), файл .htaccess сообщит Apache об обслуживании этого файла перед загрузкой инфраструктуры CakePHP для запросов к www.example.com/static.html.

Cake загружает маршруты в порядке сверху вниз и будет использовать первый соответствующий маршрут для обработки запроса. В вашем случае /en/contact должно быть выше /en/:slugid, в противном случае правило slugid всегда победит.

Если маршрутизация CakePHP не выполняет то, что вам нужно, вы всегда можете реализовать собственный класс маршрута ( book / пример ).

...