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()的路径参数。
修复方案
- 修改路由配置,补充POST请求的匹配规则,两种写法二选一即可:
- 规范写法,分开匹配GET加载页面、POST提交表单的场景:
// 加载注册表单页 $routes->get('/registrations/index', 'Registrations::index'); // 处理表单提交 $routes->post('/registrations/index', 'Registrations::index');- 简便写法,匹配该路径下所有请求方法:
$routes->add('/registrations/index', 'Registrations::index'); - 可选优化:控制器中区分请求类型,避免表单提交和页面加载逻辑混乱:
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'); } }
- 修复完成后删除
writable/cache目录下的路由缓存文件,避免旧缓存规则导致配置不生效。
内容的提问来源于stack exchange,提问作者Siva
相关产品推荐
相关产品推荐

