【问题标题】:TYPO3 - Extension development - Relations between modelsTYPO3 - 扩展开发 - 模型之间的关系
【发布时间】:2017-11-24 14:43:11
【问题描述】:

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

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

  • Galery.php
  • Picture.php

变量已设置,getter/setter 也已设置。

我很清楚我需要在关系中链接两者(“1:n”?),但我不使用扩展生成器,我想自己了解如何做到这一点。我想我必须编辑 Gallery.php 模型来解释我想要实现的关系是什么,但不明白该怎么做。

有什么帮助吗?

【问题讨论】:

    标签: typo3 fluid extbase typo3-6.2.x


    【解决方案1】:

    学习如何做到这一点的一个好方法是使用扩展生成器创建一个扩展,然后阅读生成的代码。

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

    【讨论】:

    • 好的,谢谢! “配置对象之间的关系”一章正是我想要的;)
    【解决方案2】:

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

    附加点(用于编写幻灯片扩展程序):

    • 您可能希望查看在图片中使用 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)、模型和 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、模型、存储库、ext_tables.sql) .因此,手动完成所有操作可能既乏味又容易出错。在我看来,结合阅读文档、使用 extension_builder 和自己修改代码以及查看现有扩展是教育目的的方式。后来,结合使用 extension_builder 创建骨架然后自己修改它最适合我。

    【讨论】:

    • 感谢您的解释。是的,我知道使用 extension_builder 是个好主意,但我已经为另一个扩展做了。我的目标是 100% 从零开始开发一个小扩展,以便与构建器一起构建一个更大的扩展。再次感谢您提供上述所有提示;)
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2018-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-02
      • 2012-09-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多