Comment les extensions remplacent les classes non réinscriptibles
-
16-10-2019 - |
Question
J'allais mettre en place une petite extension à activer conseils de modèle sous portée mondiale, mais est resté coincé en essayant de réécrire core/template
.
Classe récrit seulement le travail pour les classes instanciées par l'une des méthodes de Magento pour le faire (helper
, getModel
, getSingleton
). Pour abstraite et fortement prolongée des classes que vous semblez être laissé avec l'option de remplacements de local/Mage
.
Deux questions:
- Est-il un moyen intelligent pour éviter les remplacements de
local/Mage
en tout temps? - S'il n'y a pas, comment allez-vous, y compris dans les extensions telles substitutions communautaires?
La solution
1) Toute extension que vous offrez à la communauté devrait être sous la piscine de code communautaire.
2) Vous ne devriez pas, mais vous pouvez, et parfois vous devez parce que Demeter a été ignoré beaucoup dans Magento 1.
Il y a presque toujours un moyen de contourner la nécessité de remplacement, y compris l'utilisation de la réflexion comme mentionné par Vinai quelque temps en arrière .
S'il y a trop inconvénient des solutions de contournement, vous devez simplement prendre possession de la définition de classe. Vous pouvez faire un des éléments suivants, à condition que les utilisateurs soient informés:
- Dans la piscine de code communautaire, fournir la définition modifiée sous Mage | Varien | espace de noms Zend selon le cas. préoccupation possible serait que l'utilisateur final aurait pu faire la même chose.
- Comme ci-dessus, mais dans un nouveau pool de code: précédez le nouveau codepool aux bootstrap comprennent chemins à l'aide
set_include_path()
. Inconvénient:. Plusstat()
ing causé par le chargeur automatique, et votre inclure la manipulation de chemin sera non évidente car il est en dehors du bootstrap - Si possible, la définition même avant qu'il ne soit chargé à partir de son emplacement normal, par exemple par
include()
ing explicitement à partir d'un emplacement non standard dans votre espace de noms.
Son votre cas par cas a besoin ici - quelqu'un aura une idée. En ce qui concerne les conseils de chemin de modèle dans le champ d'administration, voir ma réponse qui n'a même pas besoin de PHP.