自动加载本地 TYPO3 扩展的 类
Autoloading of classes of a local TYPO3 extension
在我的后续 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",
}
},
两者都需要吗?为什么?
autoload
部分仅在您的网站包 composer.json
中需要。没有必要也将它放在根文件夹的 composer.json
中。
请参阅 documentation 您的网站包 composer.json
应该是什么样子。
如果自动加载仍然存在问题,请尝试 composer dump-autoload
或删除扩展并重新要求它。并确保检查您的命名空间的 upper-/lowercase。它区分大小写。如果在需要站点包后更改它,则需要删除并再次需要该包。
你永远不应该混合这两个 composer.json
。
由于您已经遵循了拥有目录 packages
的方法(这是一件好事),其中的每个扩展名都需要一个自己的 composer.json
文件,当然还需要一个部分
"psr-4": {
"Vendor\MyExt\": "Classes"
}
通过要求这个包,这个自动加载信息将被使用。
如果您仍然在 typo3conf/ext/my_ext
中使用自定义扩展名,那么 composer.json
文件将 不会 被考虑在内,您需要类似
"psr-4": {
"Vendor\MyExt\": "typo3conf/ext/myext/Classes"
}
在我的后续 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",
}
},
两者都需要吗?为什么?
autoload
部分仅在您的网站包 composer.json
中需要。没有必要也将它放在根文件夹的 composer.json
中。
请参阅 documentation 您的网站包 composer.json
应该是什么样子。
如果自动加载仍然存在问题,请尝试 composer dump-autoload
或删除扩展并重新要求它。并确保检查您的命名空间的 upper-/lowercase。它区分大小写。如果在需要站点包后更改它,则需要删除并再次需要该包。
你永远不应该混合这两个 composer.json
。
由于您已经遵循了拥有目录 packages
的方法(这是一件好事),其中的每个扩展名都需要一个自己的 composer.json
文件,当然还需要一个部分
"psr-4": {
"Vendor\MyExt\": "Classes"
}
通过要求这个包,这个自动加载信息将被使用。
如果您仍然在 typo3conf/ext/my_ext
中使用自定义扩展名,那么 composer.json
文件将 不会 被考虑在内,您需要类似
"psr-4": {
"Vendor\MyExt\": "typo3conf/ext/myext/Classes"
}