TYPO3扩展开发:跳转至编辑页后editAction未执行,无法获取对象属性值
问题分析与解决方案
核心问题点
- 链接参数传递错误:原
f:link.action中arguments="{person:'{person}'}"的写法会将$person对象强制转为字符串,无法正确传递实体对象到控制器。 - 重定向参数与动作参数不匹配:
toEditAction重定向时传递的参数键是personenliste,但editAction的参数变量名是$person,导致TYPO3无法正确映射注入对象。 - 冗余的中转动作:
toEditAction属于多余的中转环节,直接链接到edit动作即可减少跳转引发的问题。
修正后的代码
1. 简化控制器代码(移除冗余的toEditAction)
public function editAction(Personenliste $personenliste) { $this->view->assign('personenliste', $personenliste); return $this->htmlResponse(); }
注意:将参数名改为
$personenliste,和后续传递的参数键保持一致,确保TYPO3的对象映射能正常工作。
2. 修正前端链接调用
<f:link.action action="edit" arguments="{personenliste: person}" extensionName="testprivateext" controller="Listen" pluginName="pi1" >🔍</f:link.action>
直接链接到
edit动作,参数键personenliste和控制器动作的参数名对应,无需给person加引号和嵌套花括号,直接传递对象即可。
额外检查项
- 确认
Personenliste模型已正确配置TYPO3对象映射(在ext_typoscript_setup.typoscript中配置config.tx_extbase.persistence.classes)。 - 检查插件
pi1的配置,确保edit动作在允许的动作列表中(TypoScript配置plugin.tx_testprivateext_pi1.settings.allowedActions包含edit)。 - 若问题仍存在,打开TYPO3调试模式,查看请求参数是否正确携带
personenliste的UID,以及控制器是否接收到正确的对象。
内容的提问来源于stack exchange,提问作者Starzi
相关产品推荐
相关产品推荐

