CakePHP маршрутизация в контроллере страниц - PullRequest
1 голос
/ 11 ноября 2010

Я создаю сайт с CakePHP, и мне нужно установить некоторые URL-адреса для статических страниц, которые обрабатываются контроллером страниц.В основном я хочу иметь два разных типа статических страниц, с URL-адресами

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' => '[a-z]+')
);
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 параметр.

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

Ответы [ 2 ]

2 голосов
/ 11 ноября 2010

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

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

Router::connect(
  '/:page',
  array('controller' => 'pages', 'action' => 'display'),
  array('pass' => array('page'), 'page' => '[a-z]+')
  ); 
Router::connect(
  '/special/:mypage',
  array('controller' => 'pages', 'action' => 'display_special'),
  array('pass' => array('page'), 'page' => '[a-z]+')
  );

Код контроллера:

function display($page) {}
function display_special($page) {}

Но если вы хотите, чтобы ваш путь, попробуйте это:

Router::connect(
  '/:special/:mypage',
  array('controller' => 'pages', 'action' => 'display'),
  array('pass' => array('special', 'mypage'), 'mypage' => '[a-z]+')
  );
0 голосов
/ 11 ноября 2010

На самом деле я обнаружил, что контроллер страниц уже обрабатывает эту ситуацию, проверяя страницу и подстраницу. URL mysite.com/special/mypage указывает на app/views/pages/special/mypage.ctp с единственным правилом

Router::connect('/*', array('controller' => 'pages', 'action' => 'display'));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...