如何调用子文件夹控制器路由笨(How to call sub folder controller w

2019-10-17 05:28发布

我使用笨框架。 我在控制器中的文件夹是这样的:

 - 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在配置文件阵列。 我应该使用什么样的路由?

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

     class MY_Router extends CI_Router { // ... } 

    和重写原始_validate_request()与条件改变的序列函数。 因此,首先检查目录,然后功能。

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



Answer 2:

在你的application / config / routes.php文件文件的底部,添加这样的:

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


文章来源: How to call sub folder controller with routing CodeIgniter