CodeIgniter 4的模块化自动路由
我是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导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。