如何使用 Composer 从供应商外部自动加载 类?

How to use Composer to autoload classes from outside the vendor?

我使用来自 composer 的 psr-4 自动加载器:

"autoload": {
    "psr-4": {
        "DG\Munchkin\": "src/DG/Munch/"
    }
}

这会从 /var/www/html/xxx/vendor/yyy/src/DG/Munch

加载 classes

但是如何从 /var/www/html/xxx/ 加载 classes?

我写了我自己的自动加载器,但是当我需要 vendor/autoload.php(作曲家自动加载)和我的自动加载器时,它不会工作,直到我在我自己的自动加载器中创建 class 的实例。

src 目录将位于您的项目根目录中。 它与 vendor 目录处于同一级别。

如果你定义

"autoload": {
    "psr-4": {
        "DG\Munchkin\": "src/DG/Munch/"
    }
}

这不会从 /var/www/html/xxx/vendor/yyy/src/DG/Munch 加载 类, 就像你说的。

因为你的项目结构是:

/var/www/html/
 +- /xxx (project)
     - composer.json
     +- /src
        +- DG
           +- Munch
     +- /vendor
        - autoload.php
        +- vendor-projectA
        +- vendor-projectB
        +- yyy

\DG\Munchkin 命名空间将映射到 类 inside

/var/www/html/xxx/src/DG/Munch 不在里面

/var/www/html/xxx/vendor/yyy/src/DG/Munch.

但是如何从 /var/www/html/xxx/ 加载 类?

在项目的 composer.json(在 /var/www/html/xxx/ 内)定义路径:

"autoload": {
    "psr-4": {
        "ProjectRoot\" : "", 
        "NamspaceInSourceDir\" : "src/"         
    }
 }

或在 index.php 或 bootstrap 期间加载作曲家自动加载器并手动添加路径:

$loader = require 'vendor/autoload.php';
$loader->add('Namespace\Somewhere\Else\', __DIR__);
$loader->add('Namespace\Somewhere\Else2\', '/var/www/html/xxx');

引用:https://getcomposer.org/doc/04-schema.md#autoload