2015-01-31 37 views
15

używam psr-4 autoloader z kompozytor:Jak używać Composer do autoloadowania klas spoza dostawcy?

"autoload": { 
    "psr-4": { 
     "DG\\Munchkin\\": "src/DG/Munch/" 
    } 
} 

Ten ładuje klas z /var/www/html/xxx/vendor/yyy/src/DG/Munch

Ale jak mogę załadować klas z /var/www/html/xxx/?

Napisałem własny autoloader, ale gdy wymagam vendor/autoload.php (autoloadowanie kompozytora) i mojego autoloadera, nie będzie działać, dopóki nie utworzę instancji klasy w moim autoloader.

+2

nie można po prostu użyć 'files' lub' classmap' autoloadera? https://getcomposer.org/doc/04-schema.md#autoload – hndr

+0

Tak, pliki lub mapaklasa powinny wystarczyć. – Zarathuztra

+0

Nie, ponieważ nie mogę wybrać folderów z zewnętrznego folderu dostawcy w sekcji automatycznego ładowania. –

Odpowiedz

25

Katalog src będzie znajdować się w katalogu głównym projektu. Jest na tym samym poziomie, co katalog vendor.

Jeśli zdefiniujemy

"autoload": { 
    "psr-4": { 
     "DG\\Munchkin\\": "src/DG/Munch/" 
    } 
} 

ten nie będzie ładować klas z /var/www/html/xxx/vendor/yyy/src/DG/Munch, jakbyś stwierdził.

Ponieważ struktura projektu jest:

/var/www/html/ 
+- /xxx (project) 
    - composer.json 
    +- /src 
     +- DG 
      +- Munch 
    +- /vendor 
     - autoload.php 
     +- vendor-projectA 
     +- vendor-projectB 
     +- yyy 

Przestrzeń nazw \DG\Munchkin będzie mapować do klas wewnątrz

/var/www/html/xxx/src/DG/Munch a nie wewnątrz

/var/www/html/xxx/vendor/yyy/src/DG/Munch.

Ale jak mogę załadować klasy z/var/www/html/xxx /?

Definiowanie ścieżek w composer.json (wewnątrz/var/www/html/xxx /) swojego projektu:

"autoload": { 
    "psr-4": { 
     "ProjectRoot\\" : "", 
     "NamspaceInSourceDir\\" : "src/"   
    } 
} 

lub załadować autoloadera kompozytor w index.php lub podczas jego ładowania początkowego i ręcznie dodać ścieżki:

$loader = require 'vendor/autoload.php'; 
$loader->add('Namespace\\Somewhere\\Else\\', __DIR__); 
$loader->add('Namespace\\Somewhere\\Else2\\', '/var/www/html/xxx'); 

Odwoływanie: https://getcomposer.org/doc/04-schema.md#autoload