2016-07-26 16 views
2

Ich arbeite an einer Anwendung, wo ein "Meta" -Namespace hat mehrere Sub-Namespaces, in verschiedenen Verzeichnissen platziert. Nehmen Sie das folgende Beispiel:Composer Autoloading Sub-Namespace aus verschiedenen Verzeichnissen

$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")); 

Die „Meta“ Namespace ist natürlich Foo, und die Unternamensräume sind Bar und Baz.

composer scheint nicht glücklich darüber zu sein. Der zweite Namespace wird ignoriert. Beachten Sie, dass die Inhalte in verschiedenen Ordnern unter src gespeichert sind; 123 bzw. abc.

Können Sub-Namespaces nicht auf diese Weise mit composer zugewiesen werden?

Ich finde es ziemlich schwierig, Informationen über diesen Eckfall zu finden.

Antwort

1

Es ist möglich - mit PSR-4 Autoloader (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(); 
+0

Thank you! Ich vermutete, dass ps4 die Antwort wäre. :) – Kafoso