2014-05-20 107 views
0

我有一個CI routes.php如下。如何動態創建codeigniter路由?

$route['default_controller'] = "site"; 
$route['404_override'] = 'site'; 
$route['admin'] = 'admin'; 
$route[':any'] = 'site/user'; 

需要的事情是當任何用戶名(我將與數據庫查詢)與像URL類型 - localhost/CIproj/username那麼它應該去site/user控制器。

如果'管理員'在URL中有 - localhost/CIproj/admin它將轉到admin控制器(索引函數)。網址將更改爲localhost/CIproj/admin/dashboard

所以我得到的錯誤是當我去localhost/CIproj/admin,我得到登錄屏幕。但登錄後會去admin/dashboard。這是我重定向到site/user的地方。

然後我試着用下面的一個。

$route['user/(:any)'] = 'site/user'; 

現在一切正常。但網址將如 - localhost/CIproj/user/username

所以問題是,有沒有什麼辦法,我不必在URL中寫user。訪問者可以在URL中輸入任何內容。

localhost/CIproj/anything 

如果anything== username from database它會去site/user

如果anything== admin or any of its page它將去相應的控制器。

否則404pagenotfound.php

注意:Admin是一個包含許多控制器的巨大模塊。所以我不認爲我應該爲這裏的每個管理員控制器寫路由。

回答

1

只是坐着空白。再次通過問題並找到解決方案。 所以問題是,有什麼辦法,我不必在URL中寫用戶。訪問者可以在URL中輸入任何內容。

本地主機/ CIproj /什麼

如果anything== username from database它會去site/user

如果anything== admin or any of its page它將轉到相應的管理員控制器。

或者其他404pagenotfound.php

該路線。PHP將是這樣的 - >

$route['default_controller'] = "site"; // controller - site/method - index (404 page). 
$route['404_override'] = 'site'; // same as above 
$route['(iam:any)'] = 'site/user/$1'; // appending 'iam' to anything user enters. then in 'site' controller and 'user' method I will remove 'iam' from the segment and then check with database username. if found it will proceed to respective user page or else 404 page. 
2

對於網站用戶,您可以使用類似:

$route['(:any)'] = 'site/user/$1'; 

在這裏,您將得到$ 1中的用戶名參數,你的URL看起來像:

localhost/CIproj/anything 
+0

我想你沒有得到的問題。正如你所建議的那樣,我將獲得用戶,但管理員部分我無法獲得。如果管理員登錄並且URL更改爲「admin/dashboard」,它將始終重定向到「site/user /」。 – user1638279

+0

在您檢查用戶名參數的控制器中,您可以額外檢查如果用戶名==管理員而不是將其重定向到管理員/儀表板 – DShah