TYPO3 - 扩展开发 - 模型之间的关系

时间:2017-11-24 14:43:12

标签: typo3 fluid extbase typo3-6.2.x

仅供参考,我是一名TYPO3新秀:) 我在我的TYPO3个人网站上制作了自己的extbase / fluid扩展来管理画廊。目前,我正在关注此文档:Developing TYPO3 Extensions with Extbase and Fluid

目前,我只在Domain / Model中构建了2个类:

  • Galery.php
  • Picture.php 即可。

设置变量,getter / setter也是如此。

我很清楚我需要在一段关系中链接这两者(" 1:n"?)但我不会使用Extension Builder并希望自己了解如何做到这一点。我想我必须编辑Gallery.php模型来解释我想要实现的关系是什么,但不能理解该怎么做。

任何帮助?

3 个答案:

答案 0 :(得分:1)

学习如何执行此操作的好方法是使用Extension Builder创建扩展,然后读取生成的代码。

如果您想自己添加关系,则需要编辑ext_tables.sql并将列添加到TCA和模型中。阅读你提到的书的chapter 6,你就会知道该怎么做。

答案 1 :(得分:1)

你已经收到了一些好的答案。

其他要点(用于编制幻灯片扩展程序):

  • 您可能希望在Picture中使用FileReference类型的属性。您也可以在extension_builder中选择它。您的模型可能包含以下内容:

PictureModel.php:

/**
 * @var \TYPO3\CMS\Extbase\Domain\Model\FileReference
 * @cascade remove
 */    
 protected $image = null;
  • 如果您使用1:n作为图库/图片,则表示您的图片一次只能在一个图库中。不必要的限制。我希望使用m:n(但这实际上是一个通用的数据库建模问题)。
  • 对于m:n,您需要一个额外的关系表(按照惯例称为tx_slideshow_gallery_picture_mm)。让extension_builder为您创建它更容易。手动,您至少需要更改数据库模型(ext_tables.sql),Model和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 ...
  • 稍后,您可能会认为您甚至不需要额外的Picture类,只需使用FileReferences列表......但出于教育目的,我建议您遵循最初的方法。
  • 尝试理解事物是如何工作而不是使用“构建器”来为您创建的东西是令人钦佩的,但是考虑到在TYPO3中需要一些文件来创建模型(TCA,Model,Repository,ext_tables.sql) 。因此,手动完成所有事情可能是乏味和错误的。阅读文档,使用extension_builder和自己修改代码,同时查看现有扩展的组合在我看来是用于教育目的的方式。之后,使用extension_builder创建骨架然后自行修改它的组合最适合我。

答案 2 :(得分:0)

也许博客示例可以帮助关系:浏览博客示例。 https://docs.typo3.org/typo3cms/ExtbaseFluidBook/3-BlogExample/Index.html