我正在使用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' => '[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
参数。
我怎么可能解决这个问题?
答案 0 :(得分:2)
您只通过路由将一个参数传递给操作,这就是为什么它是第一个 - 它是唯一的参数。名字并不重要。
我会这样做:
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]+')
);
答案 1 :(得分:0)
实际上我发现页面控制器已经处理了这种情况,检查页面和子页面。网址mysite.com/special/mypage
使用唯一规则
app/views/pages/special/mypage.ctp
Router::connect('/*', array('controller' => 'pages', 'action' => 'display'));