如何使用路由CodeIgniter调用子文件夹控制器

时间:2012-09-15 23:35:23

标签: php codeigniter url-routing

我正在使用CodeIgniter框架。我的控制器文件夹中有文件,如下所示:

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

网址:mysite.com/index.php/admin/category表示找不到该网页,因为它正在尝试调用category控制器的admin功能,但我希望它可以调用index的{​​{1}}功能category文件夹中的Admin控制器。

此外,我正在使用admin控制器创建admin控制器的创建,编辑等功能,如mysite.com/index.php/admin/create

我想,我应该在配置文件中使用$route数组。我应该使用什么路由?

2 个答案:

答案 0 :(得分: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]))
    {
        // ...
    
  3. 在您的情况下,一旦满足两个条件中的第一个条件,即在找到admin.php文件时,该函数将返回。

    有两种解决方案:

    1. 重命名文件或文件夹并分别重构应用程序。
    2. extending the core更改默认行为。基本上,这将改变条件检查的顺序。这可以通过创建MY_Router class:

      来完成
      class MY_Router extends CI_Router
      {
          // ...
      }
      

      并使用更改的条件序列重写原始_validate_request()函数。所以首先检查目录然后检查功能。

    3. 如果它不需要太多的重构,我会建议第一个解决方案。

答案 1 :(得分:0)

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

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