TYPO3 - 扩展开发 - 模型之间的关系
TYPO3 - Extension development - Relations between models
仅供参考,我是 TYPO3 菜鸟 :)
我正在我的 TYPO3 个人网站中制作我自己的 extbase/fluid 扩展来管理画廊。现在,我正在关注此文档:Developing TYPO3 Extensions with Extbase and Fluid
目前,我只在 Domain/Model 中构建了 2 类 :
- Galery.php
- Picture.php.
变量已设置,getters/setters也已设置。
我很清楚我需要 link 在一个关系中(“1:n”?),但我不使用 Extension Builder,我想自己了解如何做到这一点。我想我必须编辑 Gallery.php 模型来解释我想要实现的关系是什么,但不明白该怎么做。
有帮助吗?
学习如何执行此操作的一个好方法是使用扩展构建器创建扩展,然后阅读生成的代码。
如果您想自己添加关系,则需要编辑 ext_tables.sql
并将列添加到您的 TCA 和模型中。阅读 chapter 6 您提到的那本书,您就会知道该怎么做。
也许博客示例可以帮助建立关系:博客示例之旅。
https://docs.typo3.org/typo3cms/ExtbaseFluidBook/3-BlogExample/Index.html
您已经收到了一些很好的答案。
补充要点(用于编写幻灯片扩展程序):
- 您可能希望在图片中使用 属性 类型的 FileReference。您还可以 select 中的 extension_builder。然后您的模型可能包含如下内容:
PictureModel.php:
/**
* @var \TYPO3\CMS\Extbase\Domain\Model\FileReference
* @cascade remove
*/
protected $image = null;
- 如果您对画廊/图片使用 1:n,这意味着您的图片一次只能出现在一个画廊中。不必要的限制。我建议使用 m:n(但这实际上是一个一般的数据库建模问题)。
- 对于 m:n 你需要一个额外的 table 用于关系(按照惯例称为 tx_slideshow_gallery_picture_mm 之类的东西)。让 extension_builder 为您创建它绝对更容易。您至少需要手动更改数据库模型 (ext_tables.sql)、模型和 TCA。特别是 TCA 从头开始编写可能有点棘手。
TCA 示例:
'picture' => [
'exclude' => true,
'label' => 'LLL:EXT:uniolslideshow/Resources/Private/Language/locallang_db.xlf:tx_uniolslideshow_domain_model_gallery.picture',
'config' => [
'type' => 'select',
'renderType' => 'selectMultipleSideBySide',
'foreign_table' => 'tx_uniolslideshow_domain_model_picture',
'MM' => 'tx_uniolslideshow_gallery_picture_mm',
'size' => 10,
'autoSizeMax' => 30,
'maxitems' => 9999,
'multiple' => 0,
'wizards' => [
// the fun starts here ...
- 稍后,您可能会决定甚至不需要额外的图片 class,只需使用 FileReferences 列表...但出于教育目的,我建议您遵循最初的方法。
- 尝试了解事物的工作原理而不是使用 "builder" 为您创建事物是令人钦佩的,但考虑到在 TYPO3 中创建模型(TCA、模型、存储库、 ext_tables.sql)。因此,手动完成所有操作既乏味又容易出错。在我看来,阅读文档、使用 extension_builder 和自己修改代码以及查看现有扩展的组合是用于教育目的的方法。后来,使用 extension_builder 创建骨架然后自己修改的组合最适合我。
仅供参考,我是 TYPO3 菜鸟 :) 我正在我的 TYPO3 个人网站中制作我自己的 extbase/fluid 扩展来管理画廊。现在,我正在关注此文档:Developing TYPO3 Extensions with Extbase and Fluid
目前,我只在 Domain/Model 中构建了 2 类 :
- Galery.php
- Picture.php.
变量已设置,getters/setters也已设置。
我很清楚我需要 link 在一个关系中(“1:n”?),但我不使用 Extension Builder,我想自己了解如何做到这一点。我想我必须编辑 Gallery.php 模型来解释我想要实现的关系是什么,但不明白该怎么做。
有帮助吗?
学习如何执行此操作的一个好方法是使用扩展构建器创建扩展,然后阅读生成的代码。
如果您想自己添加关系,则需要编辑 ext_tables.sql
并将列添加到您的 TCA 和模型中。阅读 chapter 6 您提到的那本书,您就会知道该怎么做。
也许博客示例可以帮助建立关系:博客示例之旅。 https://docs.typo3.org/typo3cms/ExtbaseFluidBook/3-BlogExample/Index.html
您已经收到了一些很好的答案。
补充要点(用于编写幻灯片扩展程序):
- 您可能希望在图片中使用 属性 类型的 FileReference。您还可以 select 中的 extension_builder。然后您的模型可能包含如下内容:
PictureModel.php:
/**
* @var \TYPO3\CMS\Extbase\Domain\Model\FileReference
* @cascade remove
*/
protected $image = null;
- 如果您对画廊/图片使用 1:n,这意味着您的图片一次只能出现在一个画廊中。不必要的限制。我建议使用 m:n(但这实际上是一个一般的数据库建模问题)。
- 对于 m:n 你需要一个额外的 table 用于关系(按照惯例称为 tx_slideshow_gallery_picture_mm 之类的东西)。让 extension_builder 为您创建它绝对更容易。您至少需要手动更改数据库模型 (ext_tables.sql)、模型和 TCA。特别是 TCA 从头开始编写可能有点棘手。
TCA 示例:
'picture' => [
'exclude' => true,
'label' => 'LLL:EXT:uniolslideshow/Resources/Private/Language/locallang_db.xlf:tx_uniolslideshow_domain_model_gallery.picture',
'config' => [
'type' => 'select',
'renderType' => 'selectMultipleSideBySide',
'foreign_table' => 'tx_uniolslideshow_domain_model_picture',
'MM' => 'tx_uniolslideshow_gallery_picture_mm',
'size' => 10,
'autoSizeMax' => 30,
'maxitems' => 9999,
'multiple' => 0,
'wizards' => [
// the fun starts here ...
- 稍后,您可能会决定甚至不需要额外的图片 class,只需使用 FileReferences 列表...但出于教育目的,我建议您遵循最初的方法。
- 尝试了解事物的工作原理而不是使用 "builder" 为您创建事物是令人钦佩的,但考虑到在 TYPO3 中创建模型(TCA、模型、存储库、 ext_tables.sql)。因此,手动完成所有操作既乏味又容易出错。在我看来,阅读文档、使用 extension_builder 和自己修改代码以及查看现有扩展的组合是用于教育目的的方法。后来,使用 extension_builder 创建骨架然后自己修改的组合最适合我。