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

时间:2015-01-31 15:16:44

标签: php composer-php autoload

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

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

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

加载类

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

我编写了自己的自动加载器,但是当我需要vendor/autoload.php(composer autoload)和我的自动加载器时,在我自己的自动加载器中创建类的实例之前它将无法工作。

1 个答案:

答案 0 :(得分:33)

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命名空间将映射到

中的类

/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中或在其引导期间加载composer自动加载器并手动添加路径:

$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

相关问题