使用 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 在子文件夹中路由控制器的主要内容,如果未能解决你的问题,请参考以下文章