2010-05-09 89 views
2

我想獲得Codeiginiter項目中所有控制器的列表,以便我可以輕鬆地遍歷每個控制器並添加定義的路由。我似乎無法找到一種能夠給我以後的方法嗎?如何獲取Codeigniter項目中所有控制器的數組?

下面是來自routes.php文件文件的代碼段,我想訪問數組: -

// I'd like $controllers to be dynamically populated by a method 
// 
$controllers = array('pages', 'users'); 

// Loop through each controller and add controller/action routes 
// 
foreach ($controllers as $controller) { 
    $route[$controller] = $controller . '/index'; 
    $route[$controller . '/(.+)'] = $controller . '/$1'; 
} 

// Any URL that doesn't have a/in it should be tried as an action against 
// the pages controller 
// 
$route['([^\/]+)$'] = 'pages/$1'; 

更新#1

爲了解釋多一點我是什麼試圖實現..我有一個頁面控制器,其中包含頁面,如關於,聯繫我們,隱私等。這些頁面應該都可以通過/ about,/ contact-us和/ privacy來訪問。所以基本上,Pages控制器中的任何動作/方法都可以訪問,而無需指定/ pages/<動作>。

不知道我是否正在以正確的方式進行討論?

+0

@ash,也許你可以更好地做你與的.htaccess嘗試投放的內容?爲什麼/你想試試的簡短解釋也會很酷,謝謝! – k00k 2010-05-09 13:16:57

回答

7

那麼直接回答編碼問題,你可以這樣做:

foreach(glob(APPPATH . 'controllers/*' . EXT) as $controller) 
{ 
    $controller = basename($controller, EXT); 

    $route[$controller] = $controller . '/index'; 
    $route[$controller . '/(.+)'] = $controller . '/$1'; 
} 

Buuuuuut這可能不工作了是最靈活的方法進一步向下行。

還有其他幾種方法可以做到這一點。一個是創建一個MY_Router並插入到/之前/而不是show_404();然後插入一個MY_Router並插入。

這將發送/聯繫到/網頁/聯繫人,但只有當沒有控制器,方法,路線先映射到。

OOOOOOORRRRRR使用Modular Separation,並添加以下到您的主routes.php文件

$routes['404'] = 'pages'; 
+0

非常感謝你:)兩個很棒的選擇! – ash 2010-05-10 12:45:19

+2

3個不錯的選擇。 ;-) – 2010-05-10 15:49:50

+0

非常有幫助!謝謝 :) – 2010-05-17 05:34:03

相關問題