如何使用 Composer 从供应商外部自动加载类?
Posted
技术标签:
【中文标题】如何使用 Composer 从供应商外部自动加载类?【英文标题】:How to use Composer to autoload classes from outside the vendor? 【发布时间】:2015-03-30 22:44:53 【问题描述】:我使用作曲家的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
(作曲家自动加载器)和我的自动加载器时,在我自己的自动加载器中创建类的实例之前,它无法工作。
【问题讨论】:
您不能简单地使用files
或classmap
自动加载器吗? getcomposer.org/doc/04-schema.md#autoload
是的,文件或类图应该可以解决问题。
不,因为我无法从自动加载部分的外部供应商文件夹中选择文件夹。
我需要 composer 通过绝对路径(而不是补丁 IN 供应商目录)自动加载类。
"这会从...加载类" 不是它不会使这个问题无法回答,因为它是基于不正确的假设。
【参考方案1】:
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
【讨论】:
以上是关于如何使用 Composer 从供应商外部自动加载类?的主要内容,如果未能解决你的问题,请参考以下文章