本地TYPO3扩展的类的自动加载



在下面的composer.json中,我需要扩展,这些扩展与整个项目位于同一个Git存储库中。因此,我添加了repositories部分,稍后再添加composer req vendor/site_package:@dev,以便需要本地扩展。

现在我意识到,扩展的某些类不是自动加载的。

我是否需要在项目的composer.json中添加如下所示的autoload部分?

{
"name": "site-package",
"description": "Base composer.json",
"repositories": [
{
"type": "path",
"url": "./packages/*"
}
],
"require": {
"typo3/cms-backend": "^10.4",
"typo3/cms-belog": "^10.4",
"typo3/cms-beuser": "^10.4",
"typo3/cms-core": "^10.4",
...
"vendor/site_package": "@dev",
"georgringer/news": "^8",
...
},
"autoload": {
"classmap": [
"public/typo3conf/ext/site_package/Classes"
],
"psr-4": {
"Vendor\SitePackage\": "public/typo3conf/ext/site_package/Classes"
}
},
"extra": {
"typo3/cms": {
"root-dir": "public",
"web-dir": "public"
}
},
"config": {
"vendor-dir": "vendor",
"bin-dir": "bin"
},
"scripts": {
"typo3-cms-scripts": [
"typo3cms install:generatepackagestates",
"typo3cms install:fixfolderstructure"
],
"post-autoload-dump": [
"@typo3-cms-scripts"
]
}
}

ext:site_package中,我也有以下自动加载部分:

"autoload": {
"psr-4": {
"Vendor\SitePackage\": "Classes",
}
},

我需要两者吗?为什么?

您永远不应该将这两个composer.json混合在一起。

由于您已经采用了拥有目录packages的方法(这是一件好事(,其中的每个扩展都需要一个自己的composer.json文件,当然也需要一个部分

"psr-4": {
"Vendor\MyExt\": "Classes"
}

通过需要此程序包,将使用此自动加载信息。


如果typo3conf/ext/my_ext中仍有自定义扩展名,则不会考虑该composer.json文件,并且需要类似的东西

"psr-4": {
"Vendor\MyExt\": "typo3conf/ext/myext/Classes"
}

autoload部分仅在您的站点包composer.json中需要。没有必要将它也放在根文件夹的composer.json中。

请参阅您的站点包的composer.json的外观文档。

如果您在自动加载方面仍然有问题,请尝试composer dump-autoload,或者删除扩展并再次要求它。并确保检查命名空间的大小写。它区分大小写。如果在需要网站软件包后更改了该设置,则需要删除并再次需要该软件包。

最新更新