如果在存储库中设置,则 Composer 自动加载文件不起作用
Composer autoload file not work if set in repositories
我写了以下内容
"repositories": [{
"type": "package",
"package": {
"name": "rysas/ffxiv-lodestone-php-api",
"version": "dev-master",
"source": {
"url": "git://github.com/rysas/Final-Fantasy-XIV-Lodestone-PHP-API.git",
"type": "git",
"reference": "origin/master"
},
"autoload": {
"files": [
"vendor/rysas/ffxiv-lodestone-php-api/ffxiv-lodestone-api.php"
]
}
}
}]
作曲家更新后,我的库没有加载,如果我执行以下操作,一切正常
"repositories": [{
"type": "package",
"package": {
"name": "rysas/ffxiv-lodestone-php-api",
"version": "dev-master",
"source": {
"url": "git://github.com/rysas/Final-Fantasy-XIV-Lodestone-PHP-API.git",
"type": "git",
"reference": "origin/master"
}
}
}],
"autoload": {
"psr-4": {
"App\": "src"
},
"files": [
"vendor/rysas/ffxiv-lodestone-php-api/ffxiv-lodestone-api.php"
]
}
我真的需要在我的包裹声明之外声明自动加载器吗?
当您将包信息添加为 "type=package" 时,您必须从该包的角度进行操作。
并且自动加载规则规定自动加载必须相对于 PACKAGE ROOT 进行定义。包根目录是放置在 "vendor/vendorname/packagename/" 的目录,即您不能将目录 "vendor"、"rysas" 和 "ffxiv-lodestone-php-api" 添加到自动加载定义路径。
此外,如果需要自动加载的代码实际上是 PHP class,则不应使用 "files" 自动加载器。为此使用 classmap 自动加载器(您可以将其指向不同的文件和目录)。区别:只有在需要 class 时才会自动加载类映射。文件自动加载并不是真正自动的 - 文件总是在您需要 "vendor/autoload.php" 时执行。
文件自动加载是为了在 class 之外添加全局函数,因为 PHP 无法自动加载它们。此类代码的更好解决方案是将它们作为静态函数放入 class - 这可以自动加载。它应该被视为旧遗留代码的一种变通方法,使其可以与 Composer 一起使用。
我写了以下内容
"repositories": [{
"type": "package",
"package": {
"name": "rysas/ffxiv-lodestone-php-api",
"version": "dev-master",
"source": {
"url": "git://github.com/rysas/Final-Fantasy-XIV-Lodestone-PHP-API.git",
"type": "git",
"reference": "origin/master"
},
"autoload": {
"files": [
"vendor/rysas/ffxiv-lodestone-php-api/ffxiv-lodestone-api.php"
]
}
}
}]
作曲家更新后,我的库没有加载,如果我执行以下操作,一切正常
"repositories": [{
"type": "package",
"package": {
"name": "rysas/ffxiv-lodestone-php-api",
"version": "dev-master",
"source": {
"url": "git://github.com/rysas/Final-Fantasy-XIV-Lodestone-PHP-API.git",
"type": "git",
"reference": "origin/master"
}
}
}],
"autoload": {
"psr-4": {
"App\": "src"
},
"files": [
"vendor/rysas/ffxiv-lodestone-php-api/ffxiv-lodestone-api.php"
]
}
我真的需要在我的包裹声明之外声明自动加载器吗?
当您将包信息添加为 "type=package" 时,您必须从该包的角度进行操作。
并且自动加载规则规定自动加载必须相对于 PACKAGE ROOT 进行定义。包根目录是放置在 "vendor/vendorname/packagename/" 的目录,即您不能将目录 "vendor"、"rysas" 和 "ffxiv-lodestone-php-api" 添加到自动加载定义路径。
此外,如果需要自动加载的代码实际上是 PHP class,则不应使用 "files" 自动加载器。为此使用 classmap 自动加载器(您可以将其指向不同的文件和目录)。区别:只有在需要 class 时才会自动加载类映射。文件自动加载并不是真正自动的 - 文件总是在您需要 "vendor/autoload.php" 时执行。
文件自动加载是为了在 class 之外添加全局函数,因为 PHP 无法自动加载它们。此类代码的更好解决方案是将它们作为静态函数放入 class - 这可以自动加载。它应该被视为旧遗留代码的一种变通方法,使其可以与 Composer 一起使用。