我使用的是CodeIgniter框架。我的控制器文件夹中有这样的文件:
- Controllers
--- admin.php - Admin Controller
--- /Admin - Admin Folder
----- category.php - Category Controller in Admin folder.
Url:mysite.com/index.php/admin/category
表示找不到该页面,因为它正试图调用admin
控制器的category
函数,但我希望它调用Admin
文件夹中category
控制器的index
函数。
此外,我正在使用admin
控制器来创建、编辑admin
控制器(如mysite.com/index.php/admin/create
)的功能。
我认为,我应该在配置文件中使用$route
数组。我应该使用什么路由?
这是CI核心的默认行为。参见system/core/Router.php
中的function _validate_request($segments)
。此功能尝试确定到控制器的路径。它逐一经历不同的条件,并在满足给定条件后返回结果。除此之外,还涉及两个条件:
-
它是一个文件吗?(
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; }
-
它是文件夹吗?(
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
文件,函数就会返回。
有两种解决方案:
- 重命名文件或文件夹,并分别重构应用程序
-
通过扩展核心来更改默认行为。基本上,这将以改变条件检查的顺序结束。这可以通过创建
MY_Router
类来实现:class MY_Router extends CI_Router { // ... }
以及用改变的条件序列重写原始CCD_ 17函数。所以首先检查目录,然后检查函数。
如果不需要太多重构,我会建议第一种解决方案。
在application/config/routes.php文件的底部,添加如下内容:
$route['admin/create'] = 'admin/category';