2012-04-20 61 views
0

所以管理平臺有我觀察了很奇特的URL映射風格:codeigniter中的自定義URL映射像redmine?

http://demo.redmine.org/projects/<project-name>/controller/action 

樣本:

http://demo.redmine.org/projects/produto/activity 
http://demo.redmine.org/projects/produto/issues/new 
http://demo.redmine.org/projects/produto/issues/gantt 
http://demo.redmine.org/projects/produto/files 

和URL變化的項目變更。

我該如何在codeigniter中做到這一點?我認爲它可以用routes.php完成,但到目前爲止我無法獲得任何地方。

尋找任何幫助。謝謝。

回答

0

添加到您的routes.php文件(順便說一句:你需要URL重寫了啓用路由的工作,即使用.htaccess

$route['projects/(:any)/(:any)/(:any)'] = "$2/$3/$1"; 

例如/projects/produto/issues/new將調用新的功能在類問題,它傳遞參數「produto」

還要檢查http://codeigniter.com/user_guide/general/routing.html

2

您使用路由文件中的application/config/routes.php文件 你會使用這樣的:

// the $1 maps to :any 
$route['projects/produto/:any'] = "$1"; 

// the $1 maps to the first any, $2 maps to the second :any 
$route['projects/produto/:any/:any'] = "$1/$2"; 

如果您正在處理乾淨的URL,則需要啓用mod_rewrite。否則,期待index.php/controller/action。我不能在那裏自己測試,但你應該參考:

一旦你添加一個路由(它必須在配置中被稱爲$ route []),刷新頁面並嘗試去URL!

http://codeigniter.com/user_guide/general/routing.html

+0

在您的exmaples控制器操作不知道哪個項目被選中! – 2012-04-20 22:27:12

+0

你可能必須在硬編碼它..否則你可以嘗試... $ route ['projects /:any /:any'] =「$ 1/$ 2」; – JREAM 2012-04-20 22:30:43

+0

看到我的答案,那可行 – 2012-04-20 22:32:04

3

使用下列功能的 「應用程序/控制器/ projects.php」 控制器內:從數據庫中提取他們

public function _remap($method) 
{ 
    if ($method == 'project-name') 
    { 
     //display project1 
    } 
    elseif($method == 'project-name2') 
    { 
     //display project2 
    } 
} 

您可以爲不同的方法做同樣的

看看這裏: http://codeigniter.com/user_guide/general/controllers.html#remapping

你也可以路由你的騙局troller通過使用application/config/routes.php中的自定義路由

$route['example'] = "controller/function"; 
$route['example2/(:any)'] = "controller/function";