我使用笨框架。 我在控制器中的文件夹是这样的:
- Controllers
--- admin.php - Admin Controller
--- /Admin - Admin Folder
----- category.php - Category Controller in Admin folder.
网址: mysite.com/index.php/admin/category
说找不到网页,因为它试图调用category
的功能admin
控制器,但我想它来调用index
的功能category
控制器Admin
的文件夹。
另外我使用的是admin
的创建,编辑等功能的控制器admin
控制器像mysite.com/index.php/admin/create
。
我想,我应该使用$route
在配置文件阵列。 我应该使用什么样的路由?
这是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
文件中找到。
有两个解决方案:
- 重命名文件或文件夹,分别重构应用程序。
通过更改默认行为扩展核心 。 基本上,将总结在改变的条件检查的顺序。 这可以通过创建完成MY_Router
类:
class MY_Router extends CI_Router { // ... }
和重写原始_validate_request()
与条件改变的序列函数。 因此,首先检查目录,然后功能。
我建议第一个解决方案,如果它不需要太多的重构。
在你的application / config / routes.php文件文件的底部,添加这样的:
$route['admin/create'] = 'admin/category';