我使用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)和我的自动加载器时,在我自己的自动加载器中创建类的实例之前它将无法工作。
答案 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');