2011-11-01 54 views
1

我目前正在研究CakePHP 2.0並希望將舊的1.3項目轉換爲2.0。我將從頭開始,因爲項目中有很多代碼可能會更好。CakePHP(2.0)動態網址

其中之一就是動態網址,多種語言的項目,甚至網址都會變成所選語言。例如:

英語:/pages/new-article 荷蘭:/paginas/nieuw-artikel

雙方將去PagesController::display();

注:URL可以是很長的,頁面可以有子頁面和那些將被添加到URL鏈接。例如:/pages/new-article/article-subpage

現在,我之前做的事情是爲所有事情做出具體行動的路線。像*去PagesController::index();

但是,這似乎減慢了應用程序,它帶來了很多問題。

所以我的問題是,有沒有更簡單的方法來做到這一點?

我不想硬編碼任何東西,我應該可以將/pages/article更改爲/page/article,而無需更改代碼。

注意:如果您知道在1.2或1.3版本中執行該操作的方法,那也會很棒,2.0則沒有那麼不同。

回答

5

嗯,我明白了,顯然CakePHP 1.3和2.0允許你創建自定義路由類。它的文檔在這裏:http://book.cakephp.org/2.0/en/development/routing.html?highlight=route#custom-route-classes

所以基本上你需要做的就是創建一個文件APP/Lib/Routing/Route/UrlRoute.php具有以下內容是什麼:

class UrlRoute extends CakeRoute{ 

    public function parse($url){ 
     $params = parent::parse($url); 

     # Here you get the controller and action from a database. 

     // tmp 
     $params['controller'] = 'pages'; 
     $params['action'] = 'index'; 

     return $params; 
    } 
} 

而在你APP/Config/routes.php你把以下內容:

App::import('Lib', 'Routing/Route/UrlRoute'); 
Router::connect('/*', array('controller' => 'tests', 'action' => 'index'), array('routeClass' => 'UrlRoute')); 

我認爲真正的挑戰在於讓通常傳遞給函數的參數恢復工作。 func_get_args()現在返回域名後面的所有內容。如果你使用額外的參數,從數據庫中檢索URL。可能必須緩存每個URL。