Composer 自动加载供应商 类
Composer autoloading vendor classes
我在 Packagist 上有 2 个包。
https://packagist.org/packages/erayalakese/envato-market-api (一)
https://packagist.org/packages/erayalakese/envato-update-checker (乙)
B 需要 A。
现在我在我的项目中使用 B 包。但是我收到 Class 'erayalakese\Envato_Update_Checker' (package B) not found 错误。
这是我的 composer.json 文件
{
"name": "",
"description": "",
"require": {
"erayalakese/envato-update-checker": "^1.3"
},
"authors": ...
}
还有我的项目文件:
<?php
require_once(__DIR__.'/vendor/autoload.php');
new erayalakese\Envato_Update_Checker(...);
当我将其作为临时解决方案添加到 composer.json 时,它正在运行:
"autoload": {
"classmap": ["vendor/"]
}
但我不确定是否真的需要将 vendor 文件夹添加到 autoload 。我原以为它会自动加载我的供应商。
你能告诉我我错过了什么吗?
您必须更改两个包的 composer.json
。
两个包都需要定义一个 autoload
部分。
引用:https://getcomposer.org/doc/04-schema.md#classmap
erayalakese/envato-market-api
https://github.com/erayalakese/envato-market-api/blob/master/composer.json
{
"name": "erayalakese/envato-market-api",
"description": "Envato Market API to verify and download Envato purchases",
"authors": [
{
"name": "Eray Alakese",
"email": "erayalakese@gmail.com"
}
],
"require": {},
"license": "GPL v2",
"autoload": {
"classmap": ["Envato_Market_API.php"]
}
}
现在这个包有一个自动加载类映射定义,它由一个 PHP 文件组成。当你composer install
时,包的自动加载定义将被添加到 Composer Autoloader。
其他包的相同游戏:
erayalakese/envato-update-checker
https://github.com/erayalakese/envato-update-checker/blob/master/composer.json
{
"name": "erayalakese/envato-update-checker",
"description": "Checks Envato WordPress plugins' updates and download its if any update available",
"require": {
"erayalakese/envato-market-api": "^1.0"
},
"authors": [
{
"name": "Eray Alakese",
"email": "erayalakese@gmail.com"
}
],
"license": "GPL v2",
"autoload": {
"classmap": ["Envato_Update_Checker.php"]
}
}
在你的主项目中:
- 在主项目的
composer.json
中需要 "updater" 包
- 更新程序包通过它的要求部分包含了 api 包(所以你得到两者)
- 将
require_once(__DIR__ . '/vendor/autoload.php');
添加到项目bootstrap
- 通过 Composers Autoloader 享受 Class:
new erayalakese\Envato_Update_Checker(...);
删除这一行:
https://github.com/erayalakese/envato-update-checker/blob/master/Envato_Update_Checker.php#L11
我在 Packagist 上有 2 个包。
https://packagist.org/packages/erayalakese/envato-market-api (一) https://packagist.org/packages/erayalakese/envato-update-checker (乙)
B 需要 A。
现在我在我的项目中使用 B 包。但是我收到 Class 'erayalakese\Envato_Update_Checker' (package B) not found 错误。
这是我的 composer.json 文件
{
"name": "",
"description": "",
"require": {
"erayalakese/envato-update-checker": "^1.3"
},
"authors": ...
}
还有我的项目文件:
<?php
require_once(__DIR__.'/vendor/autoload.php');
new erayalakese\Envato_Update_Checker(...);
当我将其作为临时解决方案添加到 composer.json 时,它正在运行:
"autoload": {
"classmap": ["vendor/"]
}
但我不确定是否真的需要将 vendor 文件夹添加到 autoload 。我原以为它会自动加载我的供应商。
你能告诉我我错过了什么吗?
您必须更改两个包的 composer.json
。
两个包都需要定义一个 autoload
部分。
引用:https://getcomposer.org/doc/04-schema.md#classmap
erayalakese/envato-market-api
https://github.com/erayalakese/envato-market-api/blob/master/composer.json
{
"name": "erayalakese/envato-market-api",
"description": "Envato Market API to verify and download Envato purchases",
"authors": [
{
"name": "Eray Alakese",
"email": "erayalakese@gmail.com"
}
],
"require": {},
"license": "GPL v2",
"autoload": {
"classmap": ["Envato_Market_API.php"]
}
}
现在这个包有一个自动加载类映射定义,它由一个 PHP 文件组成。当你composer install
时,包的自动加载定义将被添加到 Composer Autoloader。
其他包的相同游戏:
erayalakese/envato-update-checker https://github.com/erayalakese/envato-update-checker/blob/master/composer.json
{
"name": "erayalakese/envato-update-checker",
"description": "Checks Envato WordPress plugins' updates and download its if any update available",
"require": {
"erayalakese/envato-market-api": "^1.0"
},
"authors": [
{
"name": "Eray Alakese",
"email": "erayalakese@gmail.com"
}
],
"license": "GPL v2",
"autoload": {
"classmap": ["Envato_Update_Checker.php"]
}
}
在你的主项目中:
- 在主项目的
composer.json
中需要 "updater" 包- 更新程序包通过它的要求部分包含了 api 包(所以你得到两者)
- 将
require_once(__DIR__ . '/vendor/autoload.php');
添加到项目bootstrap - 通过 Composers Autoloader 享受 Class:
new erayalakese\Envato_Update_Checker(...);
删除这一行:
https://github.com/erayalakese/envato-update-checker/blob/master/Envato_Update_Checker.php#L11