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

CodeIgniter 4表单提交报找不到registrations/index路由错误

问题:表单访问路由提示Can't find a route for 'registrations/index'

错误截图

错误提示

关联代码片段

  • 视图文件register.php表单代码:
<?php echo form_open('/registrations/index'); ?>
  • 控制器Registrations.php代码:
class Registrations extends BaseController {

    public function index() {

        $data['coursename'] = $this->getCourseName();  

        log_message('info','name field >' . $this->request->getVar('iname') . '<<');

        echo view('templates/header');
        echo view('pages/register', $data);
        echo view('templates/footer');
    }
}
  • 路由配置app/Config/Routes.php代码:
$routes->get('/registrations/index', 'Registrations::index');

报错原因

核心问题是路由请求方法不匹配:

  • form_open()辅助函数默认生成的表单提交方法为POST,但路由文件里只定义了该路径的GET请求规则,框架收到POST请求时匹配不到对应路由,就会抛出找不到路由的错误。
  • 报错信息中显示的registrations/index不带前导斜杠是框架路由匹配时的自动格式处理,不是表单里填写的路径参数有误,无需修改form_open()的路径参数。

修复方案

  1. 修改路由配置,补充POST请求的匹配规则,两种写法二选一即可:
    • 规范写法,分开匹配GET加载页面、POST提交表单的场景:
    // 加载注册表单页
    $routes->get('/registrations/index', 'Registrations::index');
    // 处理表单提交
    $routes->post('/registrations/index', 'Registrations::index');
    
    • 简便写法,匹配该路径下所有请求方法:
    $routes->add('/registrations/index', 'Registrations::index');
    
  2. 可选优化:控制器中区分请求类型,避免表单提交和页面加载逻辑混乱:
class Registrations extends BaseController {
    public function index() {
        // 处理POST提交逻辑
        if ($this->request->is('post')) {
            log_message('info','name field >' . $this->request->getVar('iname') . '<<');
            // 此处编写表单校验、数据存储逻辑,处理完成后建议做跳转避免重复提交
        }
        // 加载表单页面
        $data['coursename'] = $this->getCourseName();  
        echo view('templates/header');
        echo view('pages/register', $data);
        echo view('templates/footer');
    }
}
  1. 修复完成后删除writable/cache目录下的路由缓存文件,避免旧缓存规则导致配置不生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 03:36:16