在 AbstractValueObject 对象上调用 getter 时会显示此错误:
属性路径“”的属性映射时出现异常:不允许创建对象。要启用此功能,您需要将 PropertyMappingConfiguration 值“CONFIGURATION_CREATION_ALLOWED”设置为 TRUE
如何解决这个问题?
在您的扩展构建器中,应选择模型作为实体而不是值对象。或在模型类中更改类定义以扩展 AbstractEntity 而不是 AbstractValueObject
# change this line:
class MyClass extends \TYPO3\CMS\Extbase\DomainObject\AbstractValueObject
# into this line:
class MyClass extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity
我刚刚找到了一个不丢弃 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 的数组。
标题中的注释说:
- 如果输入是字符串,则假定它是 UID。然后,从持久性中获取对象。
- ...
- 如果输入没有身份属性,但有其他属性,我们创建一个新对象并返回它。
根据定义,ValueObject 没有标识。因此,在不创建新的情况下添加它的唯一方法是将 UID 作为字符串参数传递给属性映射器。