TYPO3扩展:FE用户应该能够为记录/对象添加属性 - 这可能吗?

时间:2018-01-18 13:37:11

标签: typo3

有没有办法在前端添加属性(并删除它们)?

示例:

我有一个Storage类型的对象。此对象具有布尔属性$ full,此外,Storage类型的对象与Storagespace类型的对象具有1:1的关系。现在我们遇到了我的问题:在现实世界中,您可以将任意数量的货架放入存储设备中,无论是2个大货架还是4个小货架。回到我的扩展:前端用户应该能够根据需要向对象Storagespace添加尽可能多的布尔属性(shelf_a,shelf_b,shelf_c)。用户应该能够将每个属性设置为true,如果所有这些属性都设置为true,则属性$ full应将相关对象Storage设置为true。

我的问题:是否可以在我的扩展程序中创建这样的类?前端用户是否可以向对象添加属性?

2 个答案:

答案 0 :(得分:1)

简答:YES(SCNR),你编程的一切都是可能的。

指定您的问题如何编程。举个例子,你会如何解决它。

答案 1 :(得分:1)

您不能动态地向模型添加新属性(您只能设置值),但您可以向属性添加元素(也称为子属性)。

因此,您对n:m关系的想法将起作用。

保存这些相关对象的属性是ObjectStorage,具有适当的TCA定义。

您必须告诉控制器如何处理传入的HTTP值,并在initializeXXXAction()中向ObjectStorage添加/删除对象。

$mappingConfiguration = $this->arguments[$argumentName]->getPropertyMappingConfiguration();
$mappingConfiguration->allowAllProperties();
$mappingConfiguration->forProperty($property)
  ->setTypeConverterOption(
    'TYPO3\CMS\Extbase\Property\TypeConverter\PersistentObjectConverter', 
    \TYPO3\CMS\Extbase\Property\TypeConverter\PersistentObjectConverter::CONFIGURATION_CREATION_ALLOWED, 
    TRUE
  )
  ->allowAllProperties();

在单个Extbase-action中可以更新整个对象,但根据我的经验,通过添加/删除功能以及通过AJAX调用的多个操作更容易获得一个好的表单。