1

我正在使用 CodeIgniter 框架。我的控制器文件夹中有这样的文件:

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

Url:mysite.com/index.php/admin/category说找不到该页面,因为它试图调用控制器的category功能,admin但我希望它调用文件夹中控制器的index功能。categoryAdmin

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

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

4

2 回答 2

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. 通过扩展 core来改变默认行为。基本上,这将在更改条件检查的顺序时结束。这可以通过创建MY_Router类来完成:

    class MY_Router extends CI_Router
    {
        // ...
    }
    

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

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

于 2012-09-17T19:12:39.403 回答
0

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

$route['admin/create'] = 'admin/category';
于 2012-09-16T00:05:01.677 回答