Intereting Posts
Как заставить мой класс появиться в автозаполнении Аптаны? Вычислить время, отличающееся в минуту и ​​секунду Как ссылаться на статическую константу-членную переменную в PHP Доктрина: изменение формата даты при получении и установке значений полей Отправка запросов POST без ожидания ответа? Как загружается mt_rand PHP? Самый простой способ определить локализацию клиента в PHP PHP mysqli возвращает неверные столбцы Эффективное тестирование нескольких значений в PHP laravel возвращает строку json на локальном компьютере, но целое число на экземпляре экскаватора beanstalk Symfony 2: INNER JOIN на не связанной таблице с построителем запросов доктрины mysqli bind_param дает ошибку: (1210) Неправильные аргументы mysql_stmt_execute Как обновить ini-файл с помощью php? Как вызвать хранимую процедуру в CodeIgniter? Загрузка видео на Youtube с использованием API данных Youtube V3 и клиента API Google PHP – получение сообщения 401 (несанкционированное)

Маршрутизация CakePHP в контроллерах страниц

Я создаю сайт с 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 .

Как я могу это исправить?

Solutions Collecting From Web of "Маршрутизация CakePHP в контроллерах страниц"

Вы передаете только один параметр в действие с помощью маршрутизации, поэтому он первый, его единственный. Имена не имеют большого значения.

Я бы сделал это так:

 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'));