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

CodeIgniter 4.1 HMVC表单调用模块控制器方法报404错误如何解决

问题原因
  • 路由请求方法不匹配:你为shop-data-post定义的是GET类型路由,但HTML表单默认是POST提交,自定义路由未匹配成功时,CodeIgniter会走默认的自动路由规则,默认会在\App\Controllers命名空间下查找对应控制器,因此触发404报错。
  • 模块路由优先级不足:如果你的模块路由加载顺序晚于App目录下的默认路由配置,也会出现自定义路由未被优先匹配的情况。
解决方法
  1. 修正路由请求方法
    将对应路由的请求类型改为适配表单提交的POST,如果需要同时支持GET和POST可以用match方法:
$routes->group("installation", ["namespace" => "\Modules\Installation\Controllers"], function ($routes) {
    //Example URL: /installation/shop-data
    $routes->get("shop-data", "InstallationController::shop_data");
    // 适配POST提交
    $routes->post("shop-data-post", "InstallationController::shop_data_post");
    // 若需要同时支持GET/POST可替换为下面的写法
    // $routes->match(['get', 'post'], "shop-data-post", "InstallationController::shop_data_post");
});
  1. 优先加载模块路由
    打开app/Config/Routes.php,在文件最开头引入你的模块路由配置,确保自定义路由优先级高于默认自动路由,路径根据你实际的模块存放位置调整即可:
require ROOTPATH . 'Modules/Installation/Config/Routes.php';
  1. (可选)使用路由名生成表单地址,避免路径写错
    给路由设置别名,生成表单时调用别名生成地址,后续修改路由路径也不需要改表单代码,更加稳定:
    路由定义:
$routes->post("shop-data-post", "InstallationController::shop_data_post", ['as' => 'installation.shop_data_post']);

表单代码修改为:

echo form_open(route_to('installation.shop_data_post'));

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 11:15:03