2012-09-15 74 views
1

我使用的是CodeIgniter框架。我在控制器中的文件夾是這樣的:如何通過路由調用子文件夾控制器CodeIgniter

- Controllers 
--- admin.php - Admin Controller 
--- /Admin - Admin Folder 
----- category.php - Category Controller in Admin folder. 

的網址:mysite.com/index.php/admin/category說找不到網頁,因爲它正試圖打電話admin控制器的category功能,但我想它來調用category控制器的index功能在Admin文件夾中。

此外,我正在使用admin控制器來創建,編輯admin控制器的功能,如mysite.com/index.php/admin/create

我想,我應該在配置文件中使用$route數組。我應該使用什麼路由?

回答

1

這是CI核心的默認行爲。請參閱function _validate_request($segments)system/core/Router.php。該功能試圖確定控制器的路徑。一旦滿足一個給定的條件,它將一個接一個地處理不同的條件並返回結果。除此之外,還有兩個條件:

  1. 它是一個文件嗎? (system/core/Router.php線271,CI 2.1.2)

    // Does the requested controller exist in the root folder? 
    if (file_exists(APPPATH.'controllers/'.$segments[0].'.php')) 
    { 
        return $segments; 
    } 
    
  2. 它是一個文件夾? (system/core/Router.php線277,CI 2.1.2)

    // Is the controller in a sub-folder? 
    if (is_dir(APPPATH.'controllers/'.$segments[0])) 
    { 
        // ... 
    

在你的情況下,函數會返回一旦第一的兩個條件被滿足時,即當admin.php文件中找到。

解決辦法有兩個:

  1. 重命名文件或文件夾,分別重構應用程序。
  2. 將默認行爲更改爲extending the core。基本上,這將在改變條件檢查的順序中結束。這可以通過創建MY_Router類來完成:

    class MY_Router extends CI_Router 
    { 
        // ... 
    } 
    

    ,改寫原來的_validate_request()函數的條件改變了的序列。所以首先檢查目錄,然後檢查功能。

我會建議第一個解決方案,如果它不需要太多的重構。

0

在你的application/config/routes.php文件文件的底部,添加如下內容:

$route['admin/create'] = 'admin/category'; 
+0

我想要從類別控制器(它在admin文件夾中)索引函數中調用admin/category。 –

相關問題