You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在CodeIgniter 3中实现包含两个控制器的URL结构?

在CodeIgniter 3中实现嵌套控制器风格的URL

问题描述

我想要实现包含两个控制器的URL,例如domain.com/category/js/topic/promise。其中category和topic是控制器,js是category控制器的参数,promise是topic控制器的参数。我未找到相关示例,请问在CodeIgniter 3中如何实现这类包含两个控制器的URL?

以下是我的控制器代码:

Category控制器

/* code of category controller*/

class Category extends MY_Controller{

    public function index($category = null){

        if($category == null){
            // here show all categories using model
        }

        else{
            // show topics of given category
        }

    }

}

Topic控制器

/* code of topic controller */

class Topic extends MY_Controller{

    public function index($topic = null){

        if($topic == null){
            // here show all topics using model of the selected category
        }

        else{
            // show data of selected topic
        }

    }

}

实现方案

CodeIgniter 3的默认路由规则是控制器/方法/参数,无法直接支持这种嵌套两个控制器的URL结构,需要通过自定义路由来实现,同时调整控制器方法的参数接收逻辑。

1. 配置自定义路由

打开application/config/routes.php,添加以下路由规则:

// 匹配 category/[分类参数]/topic/[话题参数] 的URL,映射到Topic控制器的index方法
$route['category/(:any)/topic/(:any)'] = 'topic/index/$2/$1';

// 保留Category控制器的原有路由规则,确保基础访问正常
$route['category/(:any)'] = 'category/index/$1';
$route['category'] = 'category/index';

这条自定义路由会将domain.com/category/js/topic/promise解析为:调用Topic控制器的index方法,把promise作为第一个参数(话题参数),js作为第二个参数(分类参数)传递过去。

2. 修改Topic控制器的参数接收逻辑

因为现在需要同时获取分类和话题两个参数,调整Topic控制器的index方法:

class Topic extends MY_Controller{

    // 新增$category参数,默认值为null
    public function index($topic = null, $category = null){

        if($category == null){
            // 处理无分类的场景(如果业务需要)
        } elseif($topic == null){
            // 显示指定分类下的所有话题,使用$category参数查询数据
        } else{
            // 显示指定分类下的指定话题数据,使用$category和$topic参数查询
        }

    }

}

3. 验证路由有效性

配置完成后,验证以下场景是否正常工作:

  • 访问domain.com/category:触发Category控制器的index方法,显示所有分类
  • 访问domain.com/category/js:触发Category控制器的index方法,显示js分类下的所有话题
  • 访问domain.com/category/js/topic/promise:触发Topic控制器的index方法,显示js分类下的promise话题详情

内容的提问来源于stack exchange,提问作者MdFarzan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 17:50:23