TYPO3 V10 - EXT:news 自定义类型和持久性映射

Posted

技术标签:

【中文标题】TYPO3 V10 - EXT:news 自定义类型和持久性映射【英文标题】:TYPO3 V10 - EXT:news custom type and persistence mapping 【发布时间】:2020-10-12 01:27:36 【问题描述】:

我正在尝试升级 TYPO3 10.4 的扩展,该扩展将自定义类型添加到 tx_news (Doc)。

我根据这个例子做了迁移:Breaking: #87623

类/控制器/NewsController.php

return [
  \Xyz\Extendnews\Domain\Model\Team::class => [
    'tableName' => 'tx_news_domain_model_news',
    'recordType' => 3,
],

但是我调试 Fluid-Template 中的条目时仍然使用默认模型。

我是否遗漏了什么或有人有一个可行的例子。

感谢您的帮助。


更新: 我想创建一个新类型,在 Georg Ringer 的 manual 中解释过

我创建了一个小扩展,TYPO3 9.5 一切正常,但 TYPO3 10.4 不行。 DEMO EXT

TYPO3 10.4 的原型不是 MxnTeam\Domain\Model\Team


2020 年 6 月 29 日更新:

来自 TYPO3 Slack 频道 (post) 的 tobenschmidt 帮助我。

return [
 \Mexan\MxnTeam\Domain\Model\Team::class => [
     'tableName' => 'tx_news_domain_model_news',
     'recordType' => \Mexan\MxnTeam\Domain\Model\Team::class,
 ],
 \Mexan\MxnTeam\Domain\Model\Client::class => [
     'tableName' => 'tx_news_domain_model_news',
     'recordType' => \Mexan\MxnTeam\Domain\Model\Client::class,
 ],
 \GeorgRinger\News\Domain\Model\News::class => [
     'tableName' => 'tx_news_domain_model_news',
     //'recordType' => 0,
     'subclasses' => [
         \Mexan\MxnTeam\Domain\Model\Team::class,
         \Mexan\MxnTeam\Domain\Model\Client::class,
     ]
 ],
];

即使使用 2 种自定义类型,它也可以正常工作。 但不幸的是,不再加载默认新闻 但是如果我添加recordType => 0,那么只有普通新闻和我的自定义类型可见,而不是类型1和2(内部和外部)

我更新了扩展: mxn_team

有没有办法防止这种情况发生?

【问题讨论】:

recordType 只是新闻表中用于过滤记录的一行。共享相同新闻记录的所有扩展都应使用相同的记录类型字符串。也许您必须手动更新数据库表以符合此要求。 【参考方案1】:

这对我有用...

按照https://docs.typo3.org/p/georgringer/news/8.5/en-us/DeveloperManual/ExtendNews/AddCustomType/Index.html 中的描述实现您的新闻类型

但不是描述的 TypoScript,而是将以下文件添加到您的扩展中:

ext_name/Configuration/Extbase/Persistence/Classes.php

<?php

return [
    \GeorgRinger\News\Domain\Model\News::class => [
        'subclasses' => [
            3 => \Vendor\ExtName\Domain\Model\MyCustomNewsType::class
        ]
    ],
    Vendor\ExtName\Domain\Model\MyCustomNewsType::class => [
        'tableName' => 'tx_news_domain_model_news',
        'recordType' => 3,
    ],
];

TYPO3 v10 中移除了使用 TypoScript (config.tx_extbase.persistence.classes) 的方式

【讨论】:

我认为示例“更新 29.06.2020”的问题是缺少类型编号。 'subclasses' =&gt; [ 3 =&gt; \Mexan\MxnTeam\Domain\Model\Team::class, 4 =&gt; \Mexan\MxnTeam\Domain\Model\Client::class, ]【参考方案2】:

你写“Classes/Controller/NewsController.php”但是你必须在这里创建一个文件

extendnews/Configuration/Extbase/Persistence/Classes.php

并把你的代码放在那里。之后,不要忘记清除所有缓存。 完整的文件“Classes.php”应该是这样的

<?php
declare(strict_types = 1);

return [
  \Xyz\Extendnews\Domain\Model\Team::class => [
    'tableName' => 'tx_news_domain_model_news',
    'recordType' => \Xyz\Extendnews\Domain\Model\Team::class,
],

要使用新模型,请遵循 Georg Ringer 的手册 manual on typo3.org

还有一个工作示例here

【讨论】:

感谢您的帮助,我不想扩展新闻,我想创建一个新类型,在 Georg Ringer 的 [手册][1] 中解释了我创建了一个小扩展,TYPO3 9.5 一切正常,但 TYPO3 10.4 不行。 [DEMO EXT][2] 使用 TYPO3 10.4,原型不是 MxnTeam\Domain\Model\Team [1]:docs.typo3.org/p/georgringer/news/8.3/en-us/DeveloperManual/… [2]:github.com/Megafry/mxn_team

以上是关于TYPO3 V10 - EXT:news 自定义类型和持久性映射的主要内容,如果未能解决你的问题,请参考以下文章

TYPO3 v10 没有作曲家自动加载的功能测试

TYPO3 v10 动作控制器和子文件夹内的模板

TYPO3 v10 routeEnhancer 生成 slug 但无法解决

如何在typo3 V10的extbase控制器中重定向到404页面

从 TYPO3 v9 升级到 v10 后:显示页面不再工作(无法访问受保护的财产)

如何在 TYPO3 v10/v11 中为控制器操作参数定义正则表达式验证?