2013-01-07 177 views
3

我安裝了HMVC by wiredesignz,但從application/modules/xxx/config/routes.php的路由沒有得到認可。 下面是一個例子:codeigniter hmvc路由不能正常工作

application/modules/pages/config/routes.php我:

$route['pages/admin/(:any)'] = 'admin/$1'; 
$route['pages/admin'] = 'admin'; 

如果我鍵入URL,domain.com/admin/pages/create它不工作時,CI 404找不到頁面出現。 如果我把路線移動到application/config/routes.php它工作得很好。

如何在不將所有管理路線置於主routes.php的情況下使其工作?

我在網上搜索了4個多小時,但沒有找到有關這個問題的答案。我已經檢查過來自模塊的routes.php是否正在加載並且工作正常,但是我放入的任何路由都不起作用。

回答

2

事情是這樣的:模塊的routes.php僅被當模塊「被廢除的」載,否則CI必須加載,以處理每個請求所有模塊的所有路由配置(這不會發生) 。

您必須使用主應用程序的routes.php才能使其正常工作。您的URL中沒有使用pages段,因此該模塊的路由不會被加載。

我知道這是你想要避免的,但不幸的是,除非你想獲得「哈克」這是不可能的。


這是我使用的地圖請求admin/modulemodule/admin路由,也許你可以使用它:

// application/config/routes.php 
$route['admin']      = "dashboard/admin"; // dashboard is a module 
$route['admin/([a-zA-Z_-]+)/(:any)'] = "$1/admin/$2"; 
$route['admin/([a-zA-Z_-]+)']  = "$1/admin/index"; 
$route['(:any)/admin']    = "admin/$1"; 
+0

謝謝你的答案,所以從這個角度來看,實際上和基本上是無用的,對吧? – lesandru

+0

你不要說不清楚的東西,但因爲我在做類似的事情我會後我的路由的一個例子。 –

+0

我的意思是,如果你想使用的路由正常CI路線,你就沒有機會,如果你不「哈克它」?只有當你在段中使用模塊:)我希望清除,並感謝你分享你的代碼,我可以學到一些有用的東西 – lesandru

6

我發現使得從模塊的工作就好了路由的方式,我不知道是否是理想的解決方案,但能正常工作至今:

打開你的application/config/routes.php文件和$航線下方[「404_override」] =「」;添加以下代碼:

$modules_path = APPPATH.'modules/';  
$modules = scandir($modules_path); 

foreach($modules as $module) 
{ 
    if($module === '.' || $module === '..') continue; 
    if(is_dir($modules_path) . '/' . $module) 
    { 
     $routes_path = $modules_path . $module . '/config/routes.php'; 
     if(file_exists($routes_path)) 
     { 
      require($routes_path); 
     } 
     else 
     { 
      continue; 
     } 
    } 
} 

以下解決方案工作正常,即使config文件夾或routes.php文件從你的模塊文件夾中缺少

+0

不錯的工作,使用它沒有任何錯誤!謝謝。=) – Pran

+0

那麼,它不在服務器上工作! :( – Pran