2014-09-02 38 views
15

następujący problem: Mam zdefiniowano classmap w moim composer.json:Kompozytor classmap autoload nie załadować nowe pliki w folderze

"autoload": { 
    "classmap": [ 
     "app/controllers", 
     "app/models", 
     "app/helper.php" 
    ] 
} 

jednak, gdy tworzę nowy plik w „kontrolerów” lub " Modele ", nie załaduje ich i zawsze będę musiał wykonać zrzut autoodtwarzacza.

Czy to jest prawidłowe zachowanie? Myślałem, że autoloader od kompozytora monitoruje folder dla nowych plików?

Odpowiedz

16

Tak, to jest prawidłowe zachowanie. Jeśli chcesz, aby nowe klasy były ładowane automatycznie, musisz użyć automatycznego ładowania PSR-0 lub PSR-4.

Generowanie mapy klas wymaga od Composer znajomości nazwy pliku zawierającego określoną klasę. Można to zrobić tylko poprzez analizowanie całego kodu źródłowego w katalogu i skanowanie pod kątem klas, interfejsów i definicji cech.

Zazwyczaj jest to zadanie intensywne CPU i I/O, więc robi się to tylko wtedy, gdy Composer instaluje/aktualizuje lub (na żądanie) zrzuca autoloader, nie jest to robione przy każdym require "vendor/autoload.php";.

Należy zauważyć, że automatyczne ładowanie mapy klas jest po prostu dostępne dla starych starszych baz kodów, które nie implementowały co najmniej PSR-0. Nie jest przeznaczony do nowego kodu - chyba, że ​​chcesz zapłacić cenę, aby zrzucić automatycznie mechanizm ładujący w trakcie programowania.

+0

Ok ... wielkie dzięki! – pyxl

+0

"Zauważ, że automatyczne ładowanie mapy klas jest po prostu dostępne dla starych starszych baz kodów, które nie implementują przynajmniej PSR-0". Nie do końca prawda.Zobacz dokument dla dump-autoload: "--optimize (-o): Konwertuj automatyczne ładowanie PSR-0/4 na mapę klas, aby uzyskać szybszy autoloader. Jest to zalecane szczególnie w przypadku produkcji, ale może zająć trochę czasu więc obecnie nie jest to domyślnie wykonywane. " – spekary

+0

Optymalizacja autoloadera nie jest tym samym, co zdefiniowanie schematu automatycznego ładowania. Jeśli przyszła wersja PHP oferuje wsparcie dla poziomu PSR-4 na poziomie silnika, prawdopodobnie Composer zrezygnuje z mapy klasy podczas optymalizacji pod kątem takiej wersji, ale musi zachować mapę klasy, jeśli ta klasa jest sposobem definiowania automatycznego ładowania. – Sven

6

Przejdź do katalogu głównego serwera przez SSH. Teraz wykonaj następujące czynności:

  1. Uruchom listę ls, aby wyświetlić listę wszystkich plików.
  2. Zobaczysz plik composer.lock; usuń plik komendą rm composer.lock.
  3. Teraz uruchom polecenie php composer update.

W zależności od typu Linuxa może być konieczne uruchomienie usługi php-cli composer update.

Krok 3 utworzy nowy plik composer.lock, a wszystkie zajęcia zostaną ponownie załadowane. Zrób to za każdym razem, gdy dodasz nowe zajęcia.

czyli

  1. Run polecenie composer dump-autoload.
+1

dzięki Sven za edycję –

-2

puedes Leer este po Justo estaba Buscando lo mismo que vos y logre encontrar la respuesta en este wpis:

http://phpenthusiast.com/blog/how-to-autoload-with-composer


Możesz przeczytać ten post, ja właśnie szukam tak samo jak ty i udało się znaleźć odpowiedź w tym wątku:

http://phpenthusiast.com/blog/how-to-autoload-with-composer

+3

Proszę dodać więcej do odpowiedzi niż tylko link. Czasami linki się psują, a odpowiedź nie będzie już dobra. Ponadto, dlaczego udzieliłeś odpowiedzi dwa razy w dwóch różnych językach? – Chillie