Le problème est bien connu: les lib
classes sont chargées exclusivement via l'autochargeur, et nous ne pouvons pas les changer autrement que:
- Les copier entièrement dans un codePool vérifié plus tôt que lib.
- Installation de l' autochargeur PSR-0 , spécification d'un plan de classe de chargement automatique, puis copie complète du fichier dans cette structure de dossiers. [ma solution actuelle]
Je suis dans une situation difficile parce que je veux potentiellement toucher un grand nombre de ces fichiers - mais pour ma santé mentale et la stabilité / évolutivité du magasin, je ne veux pas copier des classes de bibliothèque entières.
Maintenant, évidemment, il existe des solutions potentielles à ce problème, mais ils viennent tous avec leur propre ensemble de problèmes:
- Suivez la route AOP et utilisez une bibliothèque PHP comme Go! AOP : Enfin, j'ai vérifié que les classes Magento doivent être chargées par l'autochargeur du compositeur, et pas seulement une disponible. Flyingmana a fait du travail dans ce domaine mais il n'est certainement pas prêt pour une utilisation en production et mes besoins sont plus immédiats. Je veux également expédier en tant qu'extension, et cela nécessiterait plus de configuration du compositeur.
- Suivez la route AOP et utilisez une extension PHP native : probablement la plus favorable à ce stade, mais cela nécessiterait l'installation d'une extension distincte, sans oublier qu'elle ne fonctionnerait pas avec HHVM.
- Utilisez le classkit et / ou le runkit de PHP : c'est une autre extension PHP native, donc elle a le même problème que ci-dessus.
- Corrigez les sites d'appels pour utiliser ma propre
\Danslo\Varien_X
version namespaced ( ), puis étendez-vous à partir de l'original (\Varien_X
): il y a juste trop de sites d'appels à patcher et cela nécessiterait une quantité stupide de réécritures. Pas une option. Lancez le mien: Il devrait être possible de:
- Écrivez mon propre chargeur automatique.
- Copiez la classe d'origine dans un dossier séparé (
{root_dir}/var/tmp
), enveloppez-lanamespace \Magento { < original contents > }
. - Incluez ce fichier.
- Inclure ma classe modifiée
OriginalClass extends Magento\OriginalClass {}
L'inconvénient est évident: génération de code dynamique, regex, un peu de surcharge pour charger des classes réécrites. Mais je suis presque sûr qu'à ce stade, il serait préférable de copier ~ 5000 lignes de code lorsque je veux juste toucher / ajouter ~ 100 lignes.
Je sais que j'en demande beaucoup, mais y a-t-il quelque chose de moderne et de relativement propre qui aide à résoudre ce problème?