2013-12-07 13 views
6

Nie mogę sprawić, że kompozytor będzie pracował z moimi własnymi klasami/plikami za pomocą mechanizmu automatycznego ładowania psr-0. Czy ktoś może rzucić trochę światła na to, dlaczego poniżej nie działa?Kompozytor nie ładuje moich własnych plików psr-0

Dostaję następujący wynik w moim dzienniku błędów:

PHP Fatal error: Class 'TestdirTest1' not found in /home/webroot/bitlama/index.php on line 5

To działa Gdybym odkomentowaniu wyraźne wymagają oświadczenie (index.php: 2).

A jeśli ktoś się zastanawia - tak, uruchomiłem instalację kompozytora w postaci: "php ../composer.phar install".

To moja struktura katalogów:

├── composer.json 
├── index.php 
├── testspacedir 
│   └── Testdir 
│    └── test1.php 
└── vendor 
    ├── autoload.php 
    └── composer 
     ├── autoload_classmap.php 
     ├── autoload_namespaces.php 
     ├── autoload_real.php 
     └── ClassLoader.php 

composer.json:

{ 
    "autoload": { 
     "psr-0": { "Testdir\\": "testspacedir/"} 
    } 
} 

test1.php:

<?php 

namespace Testdir; 

class Test1 { 

    public function __construct() 
    { 
     echo "Woohoo Test1"; 
    } 

} 

index.php:

<?php 
require 'vendor/autoload.php'; 
//require 'testspacedir/Testdir/test1.php'; 

$test1 = new Testdir\Test1(); 

sprzedawca/autoload.php:

<?php 

// autoload.php @generated by Composer 

require_once __DIR__ . '/composer' . '/autoload_real.php'; 

return ComposerAutoloaderInit7b4760e0f7ca9d6454dd2f098c374ba4::getLoader(); 
+0

Spójrz na 'vendor/composer/autoloader_namespaces.php'. Powinno to zawierać linię z twoim obszarem nazw jako klucz tablicy i właściwy folder. – Sven

Odpowiedz

3

Mój plik klasy nazwano test1.php zamiast wymaganego PSR-0 konwencji nazewnictwa Test1.php.

+0

zaznacz to jako odpowiedź, jeśli tak. – Richard

0

Mówisz to działa, ponieważ usunięto require 'testspacedir/Testdir/test1.php'; i że jest poprawny.

Po zdefiniowaniu przestrzeni nazw -> struktury folderów w autoload w , vendor/autoload.php obsługuje ładowanie tych folderów.

Zajrzyj do tego pliku vendor/autoload.php, a przekonasz się sam.

Podsumowując, kompozytor obsługuje automatyczne ładowanie plików, więc nie trzeba wykonywać tych czynności. Oto urywek z http://getcomposer.org/doc/01-basic-usage.md#autoloading

Note: Composer provides its own autoloader. If you don't want to use that one, you can just include vendor/composer/autoload_namespaces.php, which returns an associative array mapping namespaces to directories.

+0

Chciałem powiedzieć, że działa TYLKO, jeśli jednoznacznie mam to wymagające oświadczenie. To nie działa inaczej - otrzymuję fatalny błąd. –

+0

Jestem zdezorientowany, czy ręcznie przeszedłeś 'autoload.php' i zobaczysz, czy wszystko się zgadza, a wszystkie ścieżki są ustawione poprawnie? – SamV

+0

Nie jestem pewien, aby być całkiem szczerym. Zmieniłem oryginalne pytanie z zawartością autoload.php –

Powiązane problemy