【问题标题】:Routing controllers in subfolders using CodeIgniter使用 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)

【问题讨论】:

    标签: php codeigniter codeigniter-2


    【解决方案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 转发到前端。

      【讨论】:

        猜你喜欢
        • 2013-09-16
        • 1970-01-01
        • 2016-06-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-12-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多