Craft CMS自定义表单模块控制器Action触发404错误求助
Craft CMS 自定义模块表单提交404错误排查与修复
我在使用Craft CMS开发自定义联系表单模块,目标是实现后台查看提交记录+提交后发送邮件,但表单提交时一直报HTTP 404 - 未找到错误。
已完成以下操作:
- 创建了模块、控制器及对应Action
- 在
config/app.php中配置了模块 - 在
composer.json的psr-4中添加了自动加载规则 - 尝试过多种命名空间和路由组合,问题依然存在
文件夹结构
modules/ ├─ submissions/ ├─ Module.php ├─ Controllers/ ├─ defaultController.php
相关代码片段
表单Action输入代码
{{ actionInput('submissions/default/send-submission') }}
使用actionUrl也会触发相同错误:
<a href="{{ actionUrl('submissions/default/send-submission') }}">link</a>
模块代码(Module.php)
<?php namespace submissions; use Craft; class Module extends \yii\base\Module { public function init() { // 定义与命名空间对应的别名 Craft::setAlias('@submissions', __DIR__); // 根据请求类型设置控制器命名空间 if (Craft::$app->getRequest()->getIsConsoleRequest()) { $this->controllerNamespace = 'modules\\submissions\\console\\controllers'; } else { $this->controllerNamespace = 'modules\\submissions\\controllers'; } parent::init(); } }
控制器代码(defaultController.php)
<?php namespace modules\submissions\controllers; use Craft; class defaultController extends Controller { protected $allowAnonymous = [ 'action' => self::ALLOW_ANONYMOUS_LIVE | self::ALLOW_ANONYMOUS_OFFLINE, ]; public function actionSendSubmission() { echo "test"; } }
核心问题排查与修复
1. 控制器命名规范修正
Craft CMS遵循Yii框架命名约定,控制器类名必须首字母大写,且文件名需与类名完全一致:
- 将控制器文件名改为
DefaultController.php - 将类名改为
DefaultController
2. 命名空间与模块配置匹配检查
确保config/app.php中的模块配置正确:
return [ 'modules' => [ 'submissions' => [ 'class' => 'submissions\Module', ], ], 'bootstrap' => ['submissions'], ];
同时确认composer.json的psr-4自动加载规则覆盖正确路径:
"autoload": { "psr-4": { "submissions\\": "modules/submissions/", "modules\\submissions\\": "modules/submissions/" } }
修改后执行composer dump-autoload刷新自动加载规则。
3. 匿名访问配置修正
控制器中allowAnonymous的配置格式错误,需指定具体动作名称:
protected $allowAnonymous = ['send-submission'];
或精细化配置:
protected $allowAnonymous = [ 'send-submission' => self::ALLOW_ANONYMOUS_LIVE | self::ALLOW_ANONYMOUS_OFFLINE, ];
4. 缓存清理
修改配置和代码后,必须清理Craft缓存:
- 后台进入
设置 → 缓存 → 清空所有缓存 - 或执行控制台命令:
php craft clear-caches/all
内容的提问来源于stack exchange,提问作者jelle.rondas
相关产品推荐
相关产品推荐

