使用 CodeIgniter 在子文件夹中路由控制器

Posted

技术标签:

【中文标题】使用 CodeIgniter 在子文件夹中路由控制器【英文标题】:Routing controllers in subfolders using CodeIgniter 【发布时间】:2012-12-06 23:30:16 【问题描述】:

因为我想分离系统的前端和后端。我在控制器内创建了 2 个文件夹作为前端和后端

下面是我的控制器文件夹的结构

controller
 --frontend
   ---store.php
   ---processing.php
   ---profile.php
   ---authenticate.php
   ---register.php 

 --backend
   ---authenticate.php
   ---stats.php
   ---users.php
   ---property_manage.php
   ---register.php 

我可以通过使用来访问这些功能

frontend/store/add
frontend/store/manage
......

backend/stats/sales
backend/stats/payments
.....

但我想从 url 中删除前端和后端段。

我检查了 codeigniter 中的路由功能,但据我所知,我需要单独指定每条路由。由于我有大约 12 个控制器,每个控制器都有大约 10 -15 个函数,我可能必须为路由指定每个函数。

有没有其他有效的方法来实现使用路由或任何其他方式? (不使用任何 htaccess)

【问题讨论】:

【参考方案1】:

这样做:

$route['store/(:any)'] = 'frontend/store/$1';
$route['processing/(:any)'] = 'frontend/processing/$1';
$route['profile/(:any)'] = 'frontend/profile/$1';

后端也一样:

$route['backend/(:any)'] = 'backend/authenticate/$1';

您不必为控制器的每个功能在 routes.php 中创建每个规则,如上所述,每个控制器一个规则就足够了。

URI Routing : CodeIgniter User Guide

$1代表第一个表达式,这里(:any)是表达式,每条规则可以有多个表达式,表达式表示为$1$2,以此类推。

同样,(:num) 将匹配仅包含数字的段,(:any) 将匹配包含任何字符的段,(\d+) 将匹配任何数字,([a-z]+) 将匹配任何字母文本。

【讨论】:

谢谢伙伴...效果很好..所以我需要为每个控制器定义一个路由。你能告诉我1美元代表什么吗? $1代表第一个表达式,这里(:any)是表达式,每条规则可以有多个表达式,表达式表示为$1,另一边是$2,以此类推 (:num) 将匹配仅包含数字的段, (:any) 将匹配包含任何字符的段, (\d+) 将匹配任何数字, ([az]+) 将匹配任何字母文本 如果控制器具有相同的名称(例如,来自他自己的结构:register.php 和 processing.php),这将不起作用。 @rzb 对于这种情况你有什么可行的解决方案吗?【参考方案2】:

对于前端,您可以在 routes.php 中添加:

$this->set_directory( "frontend" );

所以在浏览器 URL 中,不需要包含“前端”

【讨论】:

【参考方案3】:

您必须能够以某种方式区分前端和后端。也许设置一个路由,将任何带有“admin”的 uri 转发到后端,将任何没有“admin”的 uri 转发到前端。

【讨论】:

以上是关于使用 CodeIgniter 在子文件夹中路由控制器的主要内容,如果未能解决你的问题,请参考以下文章

CodeIgniter 控制器无法访问

Codeigniter控制器和路由

CodeIgniter 路由文件夹错误

如何创建不覆盖其他控制器路由的 Codeigniter 路由?

如何将所有XML扩展路由到特定方法codeigniter?

CodeIgniter后端前端.htaccess路由器