微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决多个扩展名扩展了TYPO3 10中的一个扩展名

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中向现有扩展添加一些字段的正确方法是什么?

解决方法

正如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中的约束的完整说明。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。