首页 文章

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

提问于
浏览
1

仅供参考,我'm a TYPO3 rookie :) I'在我的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 回答

  • 1

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

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

  • 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列表......但出于教育目的,我建议您遵循最初的方法 .

    • 试图理解事物是如何工作而不是使用"builder"来为你创造东西是令人钦佩的,但是考虑到在TYPO3中需要一些文件来创建一个模型(TCA,Model,Repository,ext_tables.sql) . 因此,手动完成所有操作可能是乏味和错误的 . 阅读文档,使用extension_builder和自己修改代码,同时查看现有扩展的组合在我看来是用于教育目的的方式 . 后来,使用extension_builder创建骨架然后自己修改它的组合最适合我 .

  • 0

    也许博客示例可以帮助关系:通过博客示例的旅程 . https://docs.typo3.org/typo3cms/ExtbaseFluidBook/3-BlogExample/Index.html

相关问题