我的域模型中有一个m:n关系:
在查询模型中定义了这个:
/**
* @var Tx_Extbase_Persistence_ObjectStorage<Tx_MyExt_Domain_Model_Investigator>
*/
protected $investigator;
调查员域模型映射到TYPO3的fe_user表,在配置(ext_typoscript_setup.txt
)中正确注明:
config.tx_extbase{
persistence{
classes{
Tx_MyExt_Domain_Model_Investigator {
mapping {
recordType = Tx_Extbase_Domain_Model_FrontendUser
tableName = fe_users
}
}
}
这很好用,我可以在后端和前端显示和编辑查询记录。但是,当我想更改分配给一个查询的调查员(来自编辑操作)时,我在提交表单后会收到异常:
#1297759968: Exception while property mapping at property path "investigator":
No converter found which can be used to convert from "array" to
"Tx_Extbase_Persistence_ObjectStorage"
我用于此的多选框是这样创建的:
<f:form.select multiple="true" size="10" property="investigator"
value="{inquiry.investigator}" options="{allInvestigators}"
optionLabelField="name" />
这是这样渲染的:
<select name="tx_myext_inquiry[inquiry][investigator][]" size="10" multiple="true">
<option value="362">John Doe</option>
<option value="590">Jane Doe</option>
<option selected="selected" value="361">Steve Miller</option>
<option value="720">James Brown</option>
<option value="726">Janis Joplin</option>
</select>
{allInvestigators}
是一个包含“调查员”组中所有用户的数组。
已存储的值标有“selected”,这证明我的一些代码是正确的;)。
我尝试在InquiryController中使用类型转换器(Tx_Extbase_Property_TypeConverter_PersistentObjectConverter
Dok)摆弄,将我的数组转换为对象,但无济于事。字段调查器作为数组传递给更新操作,从而触发异常。
我现在花了五个小时,需要继续前进。
(有关更多细节的任何问题将尽快回答)
修改
环境:TYPO3版本6.1.1,Fluid 6.1.0,Extbase 6.1.0
答案 0 :(得分:2)
我在Classes/Domain/Model/Inquiry.php
/**
* @var Tx_Extbase_Persistence_ObjectStorage<Tx_MyExt_Domain_Model_Investigator>
*/
protected $investigator;
我将@var注释(部分)更改为名称空间样式:
/**
* @var \TYPO3\CMS\Extbase\Persistence\ObjectStorage<Tx_MyExt_Domain_Model_Investigator>
*/
protected $investigator;
现在更新过程有效。我想在我们的项目中,我们需要标准化模型以命名空间。 如果这是一个错误,我会将其归档于forge.typo3.org。
答案 1 :(得分:1)
目前这是TYPO3的6. *分支中的已知问题。
请参阅http://forge.typo3.org/issues/54289目前有一个待修补的修补程序。
答案 2 :(得分:0)
我已经使用GIT的TYPO3 6.1和TYPO3 6.2-dev进行了测试,无法重现此问题。如果你能放弃一些环境信息,那就太好了。请从您当前的TYPO3版本开始。