EXTBASE:属性路径处的属性映射时出现异常



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

属性

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

如何解决这个问题?

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

# change this line:
class MyClass extends TYPO3CMSExtbaseDomainObjectAbstractValueObject
# into this line:
class MyClass extends TYPO3CMSExtbaseDomainObjectAbstractEntity

我刚刚找到了解决此问题的方法,而无需丢弃 ValueObject 类型: 在表单 viewhelper 中,必须显式移交 AbstractValueObject 的 UID:

<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。然后,从持久性中获取对象。
  • 如果输入没有标识属性,而是其他属性,我们创建一个新对象并返回它。

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

最新更新