在下面的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
,或者删除扩展并再次要求它。并确保检查命名空间的大小写。它区分大小写。如果在需要网站软件包后更改了该设置,则需要删除并再次需要该软件包。