CodeIgniter 4的模块化自动路由

后端开发 2026-07-09

我是CI4的新手,正在尝试把“auto routing (improved)”功能和模块结合使用。我想像下面这样访问模块中的控制器/方法:

https://example.com/tracking/main/site

触发方法“getSite”所在的: /modules/tracking/controllers/Main.php

( 根据文档,一个控制器方法需要一个HTTP动词前缀,如 getIndex()postCreate()

我的目录结构如下

/app
/modules
  /Tracking
    /Controllers
    /Views
    /Models

app/config/Feature.php

 public bool $autoRoutesImproved = true;

app/config/autoload.php

public $psr4 = [
        APP_NAMESPACE => APPPATH,
        'Modules\Tracking' =>  ROOTPATH . 'modules/Tracking'
    ];

app/config/Routing.php

public bool $autoRoute = true;

public array $moduleRoutes = [
    'tracking' => 'Modules\Tracking\Controllers'
    ];
//(havent included the other things in the file)

据此,它应该能工作: https://codeigniter.com/user_guide/incoming/auto_routing_improved.html#module-routing

但这和它矛盾: codeigniter.com/user_guide/general/modules.html#routes

我知道如何在 Routes.php 文件中使用手动路由。但从长远来看,这会变得非常繁琐。

解决方案

这是你的控制器应该长成的样子

modules/Tracking/Controllers/Main.php

<?php

namespace Modules\Tracking\Controllers;

use App\Controllers\BaseController;

class Main extends BaseController
{
    public function getSite()
    {
        return 'Tracking site';
    }
}

那么这应该可以工作 - GET /tracking/main/site

它的映射方式如下:

tracking -> Modules\Tracking\Controllers
main     -> Main controller
site     -> getSite()

请确保正确设置PSR-4

public $psr4 = [
    APP_NAMESPACE => APPPATH,
    'Modules'    => ROOTPATH . 'modules',
];

app/Config/Routing.php

public bool $autoRoute = true;

public array $moduleRoutes = [
    'tracking' => 'Modules\Tracking\Controllers',
];

请确保按此方式调用,Linux上的文件夹大小写必须完全一致

modules/Tracking/Controllers # correct
modules/tracking/controllers # wrong
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章