多个扩展名扩展了TYPO3 10中的一个扩展名

时间:2020-09-30 09:15:13

标签: typo3 extbase tx-news typo3-10.x

Szenario: 我有两个扩展名,它们扩展了ext:news的某些特定字段。最多TYPO3 9,我必须使用以下TypoScript配置来配置对新闻扩展的依赖性:

config.tx_extbase {
  persistence {
    classes {
      
      GeorgRinger\News\Domain\Model\News {
        subclasses {
          GeorgRinger\News\Domain\Model\News = Vendor\Extension\Domain\Model\News
        }
      }

      Vendor\Extension\Domain\Model\News {
        mapping {
          tableName = tx_news_domain_model_news
        }
      }
        
    }
  }
}

模型Vendor\Extension\Domain\Model\News扩展了“基本”扩展名的模型:

class News extends \GeorgRinger\News\Domain\Model\News

在TYPO3 10中,在Configuration/Extbase/Persistence/Classes.phpBreaking: #87623)中,将TypoScript配置替换为以下配置:

\Vendor\Extension\Domain\Model\News::class => [
    'tableName' => 'tx_news_domain_model_news',
    'recordType' => 0,
],

只要您有一个扩展新闻扩展名的扩展名,它就可以使用。如果您有第二个扩展名并启用TYPO3缓存,您将收到一条错误消息,即第一个扩展名中添加的字段在新闻扩展名模板中不可用。奇怪的是,仅当启用缓存时,此问题才会发生

所以我的问题是: 在TYPO3 10中向现有扩展添加一些字段的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

正如changelog所说,在低于10的TYPO3版本中,您的主要配置位于印刷字体中。从10 LTS开始,它位于PHP类中。结果,控制加载顺序的机制不再是排印错误的一种,而是PHP的一种。

PHP加载顺序的权威性是扩展的constraints文件中的ext_emconf.php部分。它们在第一次运行时被解析,然后被缓存。 composer.json文件无法控制加载顺序-当前,它们仅用于解决composer自身中的依赖关系。

composer.json相比,ext_emconf.php不仅可以指定硬依赖性,还可以指定“软”依赖性,您可以使用suggests关键字进行设置。这样,您可以指定扩展之间的加载顺序,而不必在任何情况下都安装它们。这样一来,您就可以独立安装每个扩展程序,同时在安装了两个扩展程序时仍可以指定正确的加载顺序。

因此,在您的情况下,第二个扩展名需要对第一个扩展名具有柔和的“建议”依赖性:

constraints' => [
    'depends' => [
    ],
    'conflicts' => [
    ],
    'suggests' => [
        'news' => ''
        'first_news_extension' => ''
    ],
]

请参阅ext_emconf here中的约束的完整说明。