2

在 AbstractValueObject 对象上调用 getter 时会显示此错误:

属性路径“”的属性映射时出现异常:不允许创建对象。要启用此功能,您需要将 PropertyMappingConfiguration 值“CONFIGURATION_CREATION_ALLOWED”设置为 TRUE

如何解决这个问题?

4

2 回答 2

1

在您的扩展构建器中,应选择模型作为实体而不是值对象。或在模型类中更改类定义以扩展 AbstractEntity 而不是 AbstractValueObject

# change this line:
class MyClass extends \TYPO3\CMS\Extbase\DomainObject\AbstractValueObject
# into this line:
class MyClass extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity
于 2013-09-06T09:51:34.100 回答
0

我刚刚找到了一个不丢弃 ValueObject 类型的解决方案:在表单 viewhelper 中,必须明确地移交 AbstractValueObject 的 UID:

IE

<f:for each="{colors}" as="color">
    <f:form.radio property="color" value="{color.uid}" />
</f:for>

代替<f:form.radio property="color" value="{color}" />,其中 {colors} 是 AbstractValueObject 的数组。

原因可以在这里找到: https ://github.com/TYPO3/TYPO3.CMS/blob/master/typo3/sysext/extbase/Classes/Property/TypeConverter/PersistentObjectConverter.php

标题中的注释说:

  • 如果输入是字符串,则假定它是 UID。然后,从持久性中获取对象。
  • ...
  • 如果输入没有身份属性,但有其他属性,我们创建一个新对象并返回它。

根据定义,ValueObject 没有标识。因此,在不创建新的情况下添加它的唯一方法是将 UID 作为字符串参数传递给属性映射器。

于 2014-08-25T03:00:54.647 回答