作曲家从不同目录自动加载子命名空间

Posted

技术标签:

【中文标题】作曲家从不同目录自动加载子命名空间【英文标题】:composer autoloading sub-namespace from different directories 【发布时间】:2016-11-30 15:52:44 【问题描述】:

我正在开发一个应用程序,其中“元”命名空间有多个子命名空间,放置在不同的目录中。举个例子:

$loader = require(__DIR__ . '/vendor/autoload.php');
$loader->set('Foo\Bar', realpath(__DIR__ . "/src/123/Foo/Bar"));
$loader->set('Foo\Baz', realpath(__DIR__ . "/src/abc/Foo/Baz"));

“元”命名空间当然是Foo,子命名空间是BarBaz

composer 似乎对此并不满意。第二个命名空间被忽略。注意内容存放在src下面的不同文件夹中;分别为123abc

不能以这种方式使用composer 分配子命名空间吗?

我发现很难找到关于这个极端案例的信息。

【问题讨论】:

【参考方案1】:

这是可能的 - 使用 PSR-4 自动加载器(http://www.php-fig.org/psr/psr-4/,What is the difference between PSR-0 and PSR-4?):

$loader = require 'vendor/autoload.php';
$loader->setPsr4('Foo\\Bar\\', realpath(__DIR__ . '/src/123/Foo/Bar'));
$loader->setPsr4('Foo\\Baz\\', realpath(__DIR__ . '/src/abc/Foo/Baz'));

$bar = new Foo\Bar\BarTest();
$baz = new Foo\Baz\BazTest();

【讨论】:

谢谢!我确实怀疑ps4会是答案。 :)

以上是关于作曲家从不同目录自动加载子命名空间的主要内容,如果未能解决你的问题,请参考以下文章

作曲家自动加载器 psr-0 命名空间

作曲家自动加载命名空间错误

PHP使用来自作曲家的自动加载器添加自定义命名空间

自定义作曲家命名空间找不到类

TP框架 命名空间 与第三方类

将在自动加载的命名空间类文件中声明的函数转换为全局函数