有没有办法在前端添加属性(并删除它们)?
示例:
我有一个Storage类型的对象。此对象具有布尔属性$ full,此外,Storage类型的对象与Storagespace类型的对象具有1:1的关系。现在我们遇到了我的问题:在现实世界中,您可以将任意数量的货架放入存储设备中,无论是2个大货架还是4个小货架。回到我的扩展:前端用户应该能够根据需要向对象Storagespace添加尽可能多的布尔属性(shelf_a,shelf_b,shelf_c)。用户应该能够将每个属性设置为true,如果所有这些属性都设置为true,则属性$ full应将相关对象Storage设置为true。
我的问题:是否可以在我的扩展程序中创建这样的类?前端用户是否可以向对象添加属性?
答案 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调用的多个操作更容易获得一个好的表单。