作曲家从不同目录自动加载子命名空间
composer autoloading sub-namespace from different directories
我正在开发一个应用程序,其中一个 "meta" 命名空间有几个子命名空间,放置在不同的目录中。举个例子:
$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"));
"meta"命名空间当然是Foo
,子命名空间是Bar
和Baz
.
composer
好像不太高兴。第二个命名空间被忽略。请注意,内容存储在src
下面的不同文件夹中; 123
和 abc
。
使用 composer
这样分配子命名空间是不可能的吗?
我发现很难找到关于这个极端案例的信息。
有可能 - 使用 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();
我正在开发一个应用程序,其中一个 "meta" 命名空间有几个子命名空间,放置在不同的目录中。举个例子:
$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"));
"meta"命名空间当然是Foo
,子命名空间是Bar
和Baz
.
composer
好像不太高兴。第二个命名空间被忽略。请注意,内容存储在src
下面的不同文件夹中; 123
和 abc
。
使用 composer
这样分配子命名空间是不可能的吗?
我发现很难找到关于这个极端案例的信息。
有可能 - 使用 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();