Enrutamiento CakePHP en controlador de páginas

Estoy creando un sitio con CakePHP, y necesito establecer algunas URL para páginas estáticas, que son manejadas por el controlador de páginas. Básicamente quiero tener dos tipos diferentes de páginas estáticas, con URLS

mysyte.com/page

que debe app/views/pages/page.ctp a la app/views/pages/page.ctp y

mysite.com/special/page

que debe app/views/pages/special-page.ctp a la app/views/pages/special-page.ctp . Tenga en cuenta que en el primer caso la página también puede ser ‘especial’.

Estoy un poco perdido con la ruta que tengo que configurar para esta situación. He intentado usar las dos rutas

 Router::connect( '/special/:mypage', array('controller' => 'pages', 'action' => 'display'), array('pass' => array('mypage'), 'mypage' => '[az]+') ); Router::connect('/*', array('controller' => 'pages', 'action' => 'display')); 

y en el controlador de páginas

 function display($page = null, $mypage = null) { if ($mypage) { $path = array('special-'. $mypage); } else { $path = func_get_args(); } //The rest of the display action } 

El problema es que parece que :mypage se pasa como el primer parámetro en la acción, que es page , y no como el parámetro mypage .

¿Cómo puedo arreglar esto?

Estás pasando solo un parámetro a la acción a través del enrutamiento, por eso es el primero, es el único. Los nombres en realidad no importan.

Lo haría así:

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

Código del controlador:

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

Pero si quieres tu camino, prueba esto:

 Router::connect( '/:special/:mypage', array('controller' => 'pages', 'action' => 'display'), array('pass' => array('special', 'mypage'), 'mypage' => '[az]+') ); 

De hecho, descubrí que el controlador de páginas ya maneja esta situación, y busca páginas y subpáginas. La URL mysite.com/special/mypage apunta a la app/views/pages/special/mypage.ctp con la única regla

 Router::connect('/*', array('controller' => 'pages', 'action' => 'display'));