如何配置extbase以获取与tt_content的内联/ IRRE关系?

时间:2019-05-03 14:22:22

标签: typo3 persistence relationship extbase typo3-9.x

我构建了一个扩展,可以在其中将内容元素(tt_content)内联(IRRE)分配给TYPO3后端中的条目。 但是我不知道如何解决关系,以便可以在前端显示分配的内容元素。

我已经在TYPO3 9.5.5中使用“扩展构建器”创建了扩展。 我创建了一个模型对象“内容”,并在“域对象设置”中选择了“映射到现有表”,然后选择了“ tt_content”。 在我的模型“ ProductTab”中,将名称为“ content”的“ Inline(IRRE)”类型的1:n关系配置为“ Content”模型。

如果我在后端的模型项中添加内容元素,则其工作原理将与预期的一样。数据库中的关系字段已正确映射。通过“ Extbase变量转储”,我可以看到我所有的关系都传递给了前端插件,但是我的“内容”关系是一个空的“ ObjectStorage”。

我缺少什么以便extbase持久性获取我的内容关系?

ext_tables.sql摘录

CREATE TABLE tx_myext_domain_model_producttab (
    product int(11) unsigned DEFAULT '0' NOT NULL,
    title varchar(255) DEFAULT '' NOT NULL,
    content int(11) unsigned DEFAULT '0' NOT NULL,

);
CREATE TABLE tt_content (
    producttab int(11) unsigned DEFAULT '0' NOT NULL,
);

TCA摘录

        'content' => [
            'exclude' => false,
            'label' => 'producttab.content',
            'config' => [
                'type' => 'inline',
                'foreign_table' => 'tt_content',
                'foreign_field' => 'producttab',
                'maxitems' => 9999,
                'appearance' => [
                    'collapseAll' => 0,
                    'levelLinksPosition' => 'top',
                    'showSynchronizationLink' => 1,
                    'showPossibleLocalizationRecords' => 1,
                    'showAllLocalizationLink' => 1
                ],
            ],

        ],

由于我可以在后端中添加和编辑内容元素,因此我认为DB和TCA关系很好。 但是仍然缺少一些东西,因此获取了该关系并将其提供给FE模板,以便我可以使用ViewHelper显示分配的内容元素。

ProductTab.php摘录

class ProductTab extends \TYPO3\CMS\Extbase\DomainObject\AbstractValueObject
{
    protected $content = null;

    protected function initStorageObjects()
    {
        $this->content = new \TYPO3\CMS\Extbase\Persistence\ObjectStorage();
    }

    public function addContent(\MyExt\Domain\Model\Content $content)
    {
        $this->content->attach($content);
    }

    public function removeContent(\MyExt\Domain\Model\Content $contentToRemove)
    {
        $this->content->detach($contentToRemove);
    }

    public function getContent()
    {
        return $this->content;
    }

    public function setContent(\TYPO3\CMS\Extbase\Persistence\ObjectStorage $content)
    {
        $this->content = $content;
    }
}

Extbase变量转储

Screenshot of debug output

在屏幕截图上,您可以看到提取的产品(在这种情况下为一件)和producttabs(也是1件)。分配了一个内容元素,但uid = 1的ProductTab的属性内容为空。

更新

由于我仍然无法解决此问题,因此我创建了一个带有Extension Builder的简约扩展以演示该问题:https://github.com/apiening/demo_irrecontent

该扩展名是我可以创建的最简单的扩展名,其中一个模型仅包含一个属性以及与tt_content的关系。它具有插件list,该插件还显示调试输出。 我已经在GitHub项目的README.md中添加了更多详细信息。

0 个答案:

没有答案