Den Autoloader des Komponisten in Magento integrieren

19

So Komponist ist genial, und es gibt eine Menge Code in dem Komponisten packagist Repository , die Magento - Erweiterungen einfacher macht zu schreiben.

Das Problem, vor dem ich stehe, ist, wie man das automatische Laden (sauber) einrichtet.

Standardmäßig werden Composer-Pakete unter / vendor installiert. In diesem Verzeichnis befindet sich eine autoload.php-Datei, mit der das Laden von Klassen für die von Composer verwalteten Pakete eingerichtet wird.

Was ist der beste Weg, um die Datei '/vendor/autoload.php' des Composers zu fordern? Dies müsste sowohl für den Webstore als auch für Shell-Skripte funktionieren. Gibt es ein Beobachterereignis, auf das ich tippen kann, um die require_once auszuführen?

Prost!

Aaron Bonner
quelle
Keine Ahnung, ob github.com/magento-hackathon/magento-composer-installer hier hilfreich ist. Ich denke, es hat nichts damit zu tun. Ich denke, Sie versuchen, Nicht-Magento-Pakete mit Composer zu installieren, und möchten sie im Grunde
Alex
Ja, Sie können Composer so einstellen, dass er auf lib installiert wird, wenn Sie dies wünschen, aber ich möchte Composer-Bibliotheken / Magier-Bibliotheken nach Möglichkeit getrennt halten. Außerdem können Sie in Composer nette Dinge wie das automatische Laden von Klassenkarten haben, die nicht zum automatischen Laden von Magiern passen.
Aaron Bonner
1
+1. Scheint, als sollte einer der frühen Eventversendungen von Mage.php den Trick machen ...?
Kalenjordan
Ich weiß, dass dies vor langer Zeit beantwortet wurde, aber eine andere Möglichkeit ist, den Hersteller-Autoloader in Ihre index.php-Datei aufzunehmen (bevor er require_once $mageFilenameaufgerufen wird). Dies funktioniert gut für Client-Installationen und erfordert überhaupt kein Neuschreiben von Dateien.
Joseph bei SwiftOtter
Nun, Sie hacken eine Kerndatei, index.php. Wenn Sie ein Upgrade durchführen, müssen Sie daran denken, dass Sie diese Codezeile zu index.php hinzugefügt haben.
Aaron Bonner

Antworten:

15

Der Magento-Autoloader ist in registriert Mage.php.

Wenn Sie dies in einem eigenen Modul tun möchten, sollten Sie das erste mögliche Ereignis ergreifen und den Autoloader dort benötigen

Laut Alans Analyse wäre dies resource_get_tablename- aber Sie müssen sicherstellen, dass Sie dieses Ereignis nur einmal behandeln.

Die schnelle und schmutzige Lösung wäre das Patchen Mage.php(der Anfang der Datei) - aber das hackt den Kern.

Wir haben auch das Magento-PSR-0-Autoloader- Modul, das eine Möglichkeit bietet, das automatische Laden von Komponisten über config hinzuzufügen. Es ist eine grundlegende Implementierung, die das resource_get_tablenameEreignis nutzt .

Alex
quelle
Danke Alex, das ist perfekt. Ich hatte mage.php gepatcht, wollte das aber nicht in die Produktion aufnehmen. Das Beobachten von resource_get_tablename hat gut funktioniert!
Aaron Bonner
4
Vinai hatte auch einen großartigen Vorschlag, Varien_Autoload in den lokalen Code-Pool aufzunehmen und den erforderlichen Code dort abzulegen, wodurch teure Beobachterereignisse vermieden und Kerncode direkt gepatcht werden.
Aaron Bonner
1
"Einfache Implementierung des obigen Beispiels: github.com/thijssnowcountry/magento1_composer_loader " - @ user2594875
Fabian Schmengler