Intégration du chargeur automatique du compositeur dans Magento

19

Donc le compositeur est génial, et il y a beaucoup de code dans le dépôt packagist du compositeur qui facilite l'écriture des extensions Magento.

Le problème auquel je suis confronté est la meilleure façon de configurer (proprement) le chargement automatique.

Par défaut, les packages composer sont installés dans / vendor, et à l'intérieur de ce répertoire se trouve un fichier autoload.php qui configure le chargement de classe pour les packages gérés composer.

Alors, quelle serait la meilleure façon d'exiger le fichier '/vendor/autoload.php' du compositeur_once? Cela devrait fonctionner à la fois pour la boutique en ligne et les scripts shell. Existe-t-il un événement d'observateur sur lequel je peux appuyer pour effectuer la fonction require_once?

À votre santé!

Aaron Bonner
la source
Aucune idée si github.com/magento-hackathon/magento-composer-installer est d'une quelconque aide ici. Je pense que c'est assez indépendant. Je pense que vous essayez d'installer des packages non-Magento avec composer et que vous voulez les avoir en gros dans lib /
Alex
Oui, vous pouvez définir le compositeur pour qu'il s'installe sur lib si vous le souhaitez, mais je veux garder les librairies compositeur / mage séparées si possible. De plus, dans le composeur, vous pouvez avoir des choses intéressantes comme le chargement automatique mappé en classe qui ne correspond pas au mécanisme du chargeur automatique Mage.
Aaron Bonner
1
+1. Il semble que l'une des premières dépêches de Mage.php devrait faire l'affaire ...?
kalenjordan
Je sais que cela a été répondu il y a longtemps, mais une autre option consiste à inclure l'autochargeur du fournisseur dans votre fichier index.php (avant require_once $mageFilenameest appelé). Cela fonctionne bien pour les installations clientes et ne prend aucun fichier de réécriture.
Joseph à SwiftOtter
Eh bien, vous piratez un fichier principal, index.php. Lors de la mise à niveau, vous devez vous rappeler que vous avez ajouté cette ligne de code à index.php.
Aaron Bonner

Réponses:

15

Le chargeur automatique Magento est enregistré dans Mage.php.

Si vous voulez le faire dans un propre module, vous devez saisir le premier événement possible et y exiger l'autochargeur

Selon l'analyse d' Alan, ce serait resource_get_tablename- mais vous devez vous assurer que vous ne gérez cet événement qu'une seule fois.

La solution rapide et sale serait de patcher Mage.php(le tout début du fichier) - mais cela pirate le cœur.

Nous avons également le module Magento-PSR-0-Autoloader , qui offre un moyen d'ajouter le chargement automatique des compositeurs via config. C'est une implémentation de base qui utilise l' resource_get_tablenameévénement.

Alex
la source
Merci Alex, c'est parfait. J'avais patché mage.php mais je ne voulais pas mettre ça en production. l'observation de resource_get_tablename a bien fonctionné!
Aaron Bonner
4
Vinai a également fait une excellente suggestion pour mettre Varien_Autoload dans le pool de codes local et y mettre le code nécessaire, ce qui évite les événements d'observation coûteux et corrige directement le code principal.
Aaron Bonner
1
" Implémentation simple de l'exemple ci-dessus: github.com/thijssnowcountry/magento1_composer_loader " - @ user2594875
Fabian Schmengler