当前位置: 首页 > 知识库问答 >
问题:

多个扩展在TYPO3 10中扩展一个扩展

施越彬
2023-03-14

Szenario:我有两个扩展,它们用一些特定字段扩展了ext:news。在TYPO3 9之前,我必须使用以下打字脚本配置对新闻扩展的依赖关系进行配置:

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
        }
      }
        
    }
  }
}

模型供应商\扩展\域\模型\新闻扩展了基本扩展的模型

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

在TYPO3 10中,在configuration/Extbase/Persistence/Classes中,将打字脚本配置替换为以下配置。php(中断:#87623):

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

只要您只有一个扩展新闻扩展名的扩展名,它就可以工作多久。如果您有第二个扩展并启用TYPO3缓存,您将得到一个错误,即在第一个扩展中添加的字段在新闻扩展的模板中不可用。奇怪的是,这个问题只有在启用缓存时才会发生!

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

共有1个答案

龙凯
2023-03-14

正如变更日志所说,在10以下的TYPO3版本中,您的覆盖配置位于typoscript中。由于有10个LTS,它位于一个PHP类中。因此,控制加载顺序的机制不再是打字脚本的机制,而是PHP的机制。

PHP加载顺序的权威是ext\u emconf中的constraints部分。php扩展名的文件。它们在第一次运行时被解析,然后被缓存作曲家。json文件不控制加载顺序-目前它们仅用于解析composer本身的依赖项。

composer相反。jsonext\u emconf。php允许您不仅指定硬依赖项,还可以指定“软”依赖项,您可以使用关键字设置这些依赖项。通过这种方式,您可以指定扩展之间的加载顺序,而无需在任何情况下安装它们。这允许您独立于其他扩展安装每个扩展,同时,如果两个扩展都已安装,您仍然可以指定正确的加载顺序。

所以,在你的情况下,第二个扩展需要有一个软的“建议”依赖于第一个:

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

请参见此处ext_emconf中约束的完整解释。

 类似资料:
  • 1. 一个扩展的基本结构 2. 编译我们的扩展 3. 静态编译 4. 编写函数 5. 小结 每一个PHP扩展都至少需要两个文件:一个配置文件和一个源文件。配置文件用来告诉编译器应该编译哪几个文件,以及编译本扩展是否需要的其它lib。

  • 我已经安装了家园,我试图在Laravel项目版本4.2上工作,但是我一直收到以下错误: 需要PHP扩展。 我已经在服务器上安装了Mcypt,并在PHP7INI文件中启用了它。由于某种原因,这个问题不想消失。 有什么建议,我可以做什么,以启用我的虚拟框的密码?

  • 你好,有人知道如何发现扩展< code>ArrayBlockingQueue的类吗?例如,我想监视下面的< code>MyBufferQueue类 在属于java库的< code>ArrayBlockingQueue类中,有这样一个方法: 我遇到的问题是,当我监视类< code>MyBufferQueue时,以及在测试期间访问方法< code > ArrayBlockingQueue . put(

  • 我们将通过本文,学会创建一个 Creator3D 扩展,并通过扩展执行一段自定义脚本。 创建并安装扩展 找到 ~/.CocosEditor3D/packages Windows 用户为 C:\Users${你的用户名}.CocosEditor3D\packages),或者 ${你的项目路径}/packages 文件夹,如果文件夹不存在,则新建这个文件夹。 在这个文件夹里新创建一个空的文件夹,并命名

  • 问题内容: 我知道一个类可以实现多个接口,但是可以扩展多个类吗?例如,我希望我的班级同时扩展我创建的类。这在Java中可行吗?这两个语句并收到一个错误。如果不可能,为什么呢?扩展,但我猜它也扩展了,因为它继承了字段,并且可以在需要对象的地方传递。同样,像Java中的所有类一样,它们扩展了类。那么为什么不能扩展一个以上的类呢? TransformGroup继承 那么,如果可能的话,正确的方法是什么?

  • 扩展是专门设计的在 Yii 应用中随时可拿来使用的, 并可重发布的软件包。例如, yiisoft/yii2-debug 扩展在你的应用的每个页面底部添加一个方便用于调试的工具栏, 帮助你简单地抓取页面生成的情况。 你可以使用扩展来加速你的开发过程。 信息: 本文中我们使用的术语 "扩展" 特指 Yii 软件包。而用术语 "软件包" 和 "库" 指代非 Yii 专用的通常意义上的软件包。 使用扩展