我想为同一控制器和同一类型的对象中的不同操作解决不同的模型。
例如,在列表视图中我需要一些额外的拇指预览,在详细视图中我需要更多字段。在 JSON 视图中,我需要一些附加属性。
那么,我们可以根据每个操作组织模型,保留相同的数据表吗?
自从提出问题以来,TYPO3 中的许多事情都发生了变化,现在事情可能会有所不同。
在版本 11 或 12 中,可以通过
subclasses
相对简单地实现该方法。
这是文档的描述:
同一个数据库表可以使用不同的模型。
一个常见的用例是共享共同功能的相关领域对象,并且应该由分层模型类处理。
在这种情况下,模型的类型存储在表中的字段中,通常存储在名为 record_type 的字段中。然后将该字段注册为 TCA 数组的 ctrl 部分中的类型字段:
EXT:my_extension/Configuration/TCA/tx_myextension_domain_model_something.php
return [
'ctrl' => [
'title' => 'Something',
'label' => 'title',
'type' => 'record_type',
// …
],
];
然后在 Configuration/Extbase/Persistence/Classes.php 文件中配置记录类型和首选模型之间的关系。
EXT:my_extension/Configuration/Extbase/Persistence/Classes.php
return [
\MyVendor\MyExtension\Domain\Model\Something::class => [
'tableName' => 'tx_myextension_domain_model_party',
'recordType' => 'something',
'subclasses' => [
'oneSubClass' => \MyVendor\MyExtension\Domain\Model\SubClass1::class,
'anotherSubClass' => MyVendor\MyExtension\Domain\Model\SubClass2::class,
],
],
];
然后就可以拥有一个通用存储库 SomethingRepository,它根据 record_type 字段的值返回 SubClass1 和 SubClass2 对象。这样,相关的领域对象可以在某些上下文中作为一个整体。
可以在扩展程序news
中找到
示例。