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