2011-02-11 45 views
2

在我的CakePHP應用程序我有建立這樣的靜態頁面:CakePHP在路由中使用Regex變量捕獲?

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

這將改寫/terms/pages/display/terms爲了漂亮較短的網址。

現在,如果我想爲我的所有靜態頁面做到這一點,它會得到相當多餘的:自然

/(terms|privacy|about) /pages/display/$1 

所以我:

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

通過定期的mod_rewrite,你可以做這樣的事情企圖:

Router::connect(
    '/(terms|privacy|about)', 
    array('controller' => 'pages', 'action' => 'display', '$1') 
); 

它不起作用。有沒有支持這樣的事情,如果是的話,你怎麼做?

回答

3

就在我頭頂,這可能會解決問題。要在您需要的話這樣的部分進行正則表達式匹配:

Router::connect(
    '/:page', 
    array(
     'controller' => 'pages', 
     'action' => 'display', 
    ), 
    array(
     'page' => '(terms|privacy|about)', 
     'pass' => array('page') 
    ) 
); 

注意如何在URL中page佔位符的第三個參數,則數組被推斷上。在那裏我們說它必須匹配提供的正則表達式。另外值得注意的是,它也表示通過page佔位符到action方法。這樣它就知道要渲染哪個頁面。

+0

我想了解這裏發生了什麼。在第一個參數`/:page`中冒號是什麼意思? – 2011-02-11 20:19:54