CodeIgniter 4 HMVC开发求助:找不到适配插件,需模块式开发
在CodeIgniter 4中实现HMVC风格的模块化开发
CodeIgniter 4没有官方的HMVC插件,但完全可以通过原生的命名空间和目录结构手动实现按类划分模块,让每个模块独立拥有控制器、视图甚至配置文件,具体步骤如下:
1. 搭建模块目录结构
在app目录下新建Modules文件夹,每个业务模块单独建子目录,比如用户模块的结构示例:
app/ └── Modules/ └── User/ ├── Controllers/ │ └── User.php ├── Views/ │ └── profile.php └── Config/ └── Routes.php
2. 配置命名空间自动加载
打开app/Config/Autoload.php,找到$psr4数组,添加模块的命名空间映射:
public $psr4 = [ APP_NAMESPACE => APPPATH, 'Config' => APPPATH . 'Config', 'Modules\\' => APPPATH . 'Modules', // 一次性映射所有模块,无需逐个添加 ];
3. 编写模块控制器
以用户模块的控制器为例,Modules/User/Controllers/User.php代码示例:
namespace Modules\User\Controllers; use CodeIgniter\Controller; class User extends Controller { public function profile() { // 直接调用模块内的视图文件 return view('Modules\User\Views\profile'); } }
4. 配置模块专属路由
每个模块可以单独维护路由文件,在Modules/User/Config/Routes.php中编写模块专属路由:
$routes->get('user/profile', 'Modules\User\Controllers\User::profile');
然后在主路由文件app/Config/Routes.php末尾引入模块路由:
require_once APPPATH . 'Modules/User/Config/Routes.php';
如果有多个模块,依次引入对应模块的路由文件即可。
5. 简化视图调用(可选)
默认调用视图需要写完整命名空间路径,想简化的话,打开app/Config/View.php,在$paths数组里添加模块根目录:
public $paths = [ APPPATH . 'Views/', APPPATH . 'Modules/', ];
之后控制器里就能用更短的路径调用视图:
return view('User\Views\profile');
额外说明
- 模块内的模型、库、语言文件等都可以按同样逻辑组织,比如
Modules/User/Models/UserModel.php,命名空间设为Modules\User\Models,在控制器里直接use即可调用。 - 每个模块可以独立配置过滤器、验证规则等,只要遵循命名空间规范,CI4就能自动加载。
内容的提问来源于stack exchange,提问作者Cristian De Jesus Torres Diaz
相关产品推荐
相关产品推荐

