我正在使用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
数组。我应该使用什么路由?
答案 0 :(得分:1)
这是CI核心的默认行为。请参阅function _validate_request($segments)
中的system/core/Router.php
。此函数尝试确定控制器的路径。它逐个经历不同的条件,并在满足给定条件后返回结果。除了另一个,还有两个条件:
是文件吗? (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
文件时,该函数将返回。
有两种解决方案:
按extending the core更改默认行为。基本上,这将改变条件检查的顺序。这可以通过创建MY_Router
class:
class MY_Router extends CI_Router
{
// ...
}
并使用更改的条件序列重写原始_validate_request()
函数。所以首先检查目录然后检查功能。
如果它不需要太多的重构,我会建议第一个解决方案。
答案 1 :(得分:0)
在application / config / routes.php文件的底部,添加如下内容:
$route['admin/create'] = 'admin/category';