【问题标题】:EXTBASE: Exception while property mapping at property pathEXTBASE:属性路径中的属性映射时出现异常
【发布时间】:2013-09-06 09:51:34
【问题描述】:

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

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

如何解决?

【问题讨论】:

  • 调用 getter 时出现此错误???这听起来不对。

标签: model typo3 extbase


【解决方案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

【讨论】:

  • 这确实解决了问题(有同样的问题) - 但真正的问题仍然存在......
【解决方案2】:

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

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

代替&lt;f:form.radio property="color" value="{color}" /&gt;,其中{colors} 是一个AbstractValueObject 数组。

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

标题中的注释说:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-23
    • 1970-01-01
    相关资源
    最近更新 更多