Я создаю сайт с CakePHP, и мне нужно установить некоторые URL-адреса для статических страниц, которые обрабатываются контроллером страниц. В принципе, я хочу иметь два разных типа статических страниц, с URLS
mysyte.com/page
который должен отображаться в app/views/pages/page.ctp
и
mysite.com/special/page
который должен отображаться в app/views/pages/special-page.ctp
. Обратите внимание, что в первом случае страница может быть «специальной».
Я немного потерялся с маршрутизацией, которую я должен настроить для этой ситуации. Я попытался использовать два маршрута
Router::connect( '/special/:mypage', array('controller' => 'pages', 'action' => 'display'), array('pass' => array('mypage'), 'mypage' => '[az]+') ); Router::connect('/*', array('controller' => 'pages', 'action' => 'display'));
и в контроллере страниц
function display($page = null, $mypage = null) { if ($mypage) { $path = array('special-'. $mypage); } else { $path = func_get_args(); } //The rest of the display action }
Проблема в том, что кажется, что :mypage
передается как первый параметр в действии, который является page
, а не как параметр mypage
.
Как я могу это исправить?
Вы передаете только один параметр в действие с помощью маршрутизации, поэтому он первый, его единственный. Имена не имеют большого значения.
Я бы сделал это так:
Router::connect( '/:page', array('controller' => 'pages', 'action' => 'display'), array('pass' => array('page'), 'page' => '[az]+') ); Router::connect( '/special/:mypage', array('controller' => 'pages', 'action' => 'display_special'), array('pass' => array('page'), 'page' => '[az]+') );
Код контроллера:
function display($page) {} function display_special($page) {}
Но если вы хотите свой путь, попробуйте это:
Router::connect( '/:special/:mypage', array('controller' => 'pages', 'action' => 'display'), array('pass' => array('special', 'mypage'), 'mypage' => '[az]+') );
На самом деле я обнаружил, что контроллер страниц уже обрабатывает эту ситуацию, проверяя страницу и подстраницу. URL-адрес mysite.com/special/mypage
указывает на app/views/pages/special/mypage.ctp
с единственным правилом
Router::connect('/*', array('controller' => 'pages', 'action' => 'display'));