重写EXT:femanager控制器Action后编辑表单验证失效求助
EXT:femanager自定义Action导致编辑表单验证失败的解决建议
问题背景
为EXT:femanager添加自定义fileDeleteAction,已重写UserController并修改FlexForm添加User->fileDelete动作,但编辑表单始终提示“该字段无法验证”。
解决步骤
1. 确认控制器重写生效
当前代码仅通过Hook修改了FlexForm,但未完成自定义控制器的注册。需在ext_localconf.php中添加控制器替换配置:
$GLOBALS['TYPO3_CONF_VARS']['EXTENSIONS']['femanager']['controllers']['User']['className'] = \Vandor\Ext\Controller\UserController::class;
添加后清除系统缓存,确保TYPO3使用自定义的UserController。
2. 更新允许的控制器动作列表
根据FlexForm注释提示,必须修改PluginRepository中的允许动作字符串,否则Extbase会拦截未授权的动作。通过Xclass重写该类:
- 在
ext_localconf.php注册Xclass:
$GLOBALS['TYPO3_CONF_VARS']['SYS']['Objects'][\In2code\Femanager\Domain\Repository\PluginRepository::class] = [ 'className' => \Vandor\Ext\Domain\Repository\PluginRepository::class ];
- 创建自定义
PluginRepository类:
<?php declare(strict_types=1); namespace Vandor\Ext\Domain\Repository; class PluginRepository extends \In2code\Femanager\Domain\Repository\PluginRepository { protected $scaString = 'New->new,create,createStatus,confirmCreateRequest;Edit->edit,update,delete,confirmUpdateRequest;User->list,show,imageDelete,fileDelete;Invitation->new,create,edit,update,delete,status;New->resendConfirmationDialogue,resendConfirmationMail'; }
这里将User->fileDelete添加到了允许的动作列表中。
3. 排查表单验证规则
编辑表单验证失败可能和companyDocuments字段的配置有关:
- 检查该字段在TCA或femanager配置中的
required属性,若设置为必填,删除后为空会触发验证失败,需调整为非必填。 - 确保
fileDeleteAction是独立请求,不要和编辑表单的提交逻辑混淆,避免误触发编辑表单的验证流程。
4. 检查请求与日志
- 确认调用
fileDeleteAction的链接生成正确,例如:
<f:link.action action="fileDelete" controller="User" arguments="{user: currentUser}" />
- 查看
var/log/目录下的TYPO3日志,获取验证失败的具体字段信息或Extbase动作授权错误,定位问题根源。
5. 清除所有缓存
修改配置后,务必清除TYPO3的系统缓存、页面缓存和配置缓存,确保所有新配置生效后再测试。
内容的提问来源于stack exchange,提问作者Geee
相关产品推荐
相关产品推荐

