Integracja autoloadera kompozytora z Magento

19

Tak więc kompozytor jest niesamowity, aw repozytorium packagist kompozytora jest dużo kodu, który ułatwia pisanie rozszerzeń Magento.

Problem, przed którym stoję, polega na tym, jak najlepiej (czysto) skonfigurować automatyczne ładowanie.

Domyślnie pakiety kompozytora są instalowane w katalogu / vendor, a wewnątrz tego katalogu znajduje się plik autoload.php, który konfiguruje ładowanie klas dla pakietów zarządzanych przez kompozytora.

Jaki byłby więc najlepszy sposób na wymaganie pliku „/vendor/autoload.php” kompozytora? Musiałoby to działać zarówno dla sklepu internetowego, jak i skryptów powłoki. Czy istnieje zdarzenie obserwatora, którego mogę dotknąć, aby wykonać wymagany parametr?

Twoje zdrowie!

Aaron Bonner
źródło
Nie ma pojęcia, czy github.com/magento-hackathon/magento-composer-installer jest tutaj pomocny. Myślę, że to dość niezwiązane. Myślę, że próbujesz zainstalować pakiety inne niż Magento z kompozytorem i chcesz w zasadzie mieć je w lib /
Alex
Tak, możesz ustawić kompozytora tak, aby instalował się na lib, jeśli chcesz, ale chcę, aby libery kompozytora / biblioteki magów były oddzielne, jeśli to możliwe. Również w kompozytorze możesz mieć porządne rzeczy, takie jak automatyczne ładowanie mapowane klasą, które nie pasuje do mechanizmu autoloadera Mage.
Aaron Bonner
1
+1. Wydaje się, że jedna z pierwszych wysyłek wydarzeń z Mage.php powinna załatwić sprawę ...?
kalenjordan
Wiem, że odpowiedź została udzielona dawno temu, ale inną opcją jest włączenie autoloadera dostawcy w pliku index.php (przed require_once $mageFilenamewywołaniem). Działa to dobrze w instalacjach klienckich i nie wymaga w ogóle przepisywania plików.
Joseph w SwiftOtter
Cóż, włamujesz się do podstawowego pliku index.php. Podczas aktualizacji pamiętaj, że dodałeś ten wiersz kodu do index.php.
Aaron Bonner

Odpowiedzi:

15

Autoloader Magento jest zarejestrowany w Mage.php.

Jeśli chcesz to zrobić we własnym module, powinieneś pobrać pierwsze możliwe zdarzenie i wymagać tam autoloadera

Według analizy Alana byłoby to resource_get_tablename- ale musisz upewnić się, że poradzisz sobie z tym wydarzeniem tylko raz.

Szybkim i brudnym rozwiązaniem byłoby załatanie Mage.php(sam początek pliku) - ale to włamuje się do rdzenia.

Mamy też moduł Magento-PSR-0-Autoloader , który oferuje sposób dodawania autoloaderów kompozytorów poprzez config. Jest to podstawowa implementacja wykorzystująca resource_get_tablenamewydarzenie.

Alex
źródło
Dzięki Alex, to idealnie. Poprawiłem mage.php, ale nie chciałem tego produkować. obserwowanie parametru nazwa_zasobu działa poprawnie!
Aaron Bonner
4
Vinai również ma świetną sugestię, aby umieścić Varien_Autoload w lokalnej puli kodów i umieścić tam niezbędny kod, który pozwala uniknąć kosztownych zdarzeń obserwatora i bezpośredniego łatania kodu podstawowego.
Aaron Bonner
1
„Prosta implementacja powyższego przykładu: github.com/thijssnowcountry/magento1_composer_loader ” - @ user2594875
Fabian Schmengler