Ok, mit Installationsskripten scheint es eine seltsame Konvention zu geben, um Folgendes zu verwenden:
$installer = $this;
Ich verstehe das wirklich nicht, da es völlig überflüssig ist.
Warum nicht einfach im $this->
gesamten Skript verwenden?
Irgendwelche Ideen, warum diese Konvention existiert?
magento-1
installation
resource-model
setup-script
install-script
Marty Wallace
quelle
quelle
Antworten:
Die Antwort ist viel einfacher. Im Jahr 2007 (und ich glaube, bis 2009, als PhpStorm zu rocken begann) durfte keine IDE Inline-Phpdoc für bereitstellen
$this
. Kernentwickler wollten jedoch eine Autovervollständigung in IDE. Deshalb haben sie diese 2 Zeilen benutzt:Einige Module haben eine eigene Setup-Klasse und sollten in Inline-PHPDOC verwendet werden. Da Setup / Upgrade-Skripte jedoch immer über "Kopieren / Einfügen einer vorhandenen und Ändern" erstellt wurden (und werden), finden Sie möglicherweise Beispiele, wenn das Modul eine eigene Setup-Klasse hat (oder ein EAV-Setup-Modell verwendet
Mage_Eav_Model_Entity_Setup
), aberMage_Catalog_Model_Resource_Setup
beim Upgrade in Inline-Phpdoc verwendet wird Skript.quelle
Die älteste Version, die ich habe, ist 1.0. Schon damals
$installer = $this;
existierte. Auch in den genannten Dateienupgrade-0.x.y-0.z.t
existiert diese Zeile.Meiner Meinung nach hatten sie zu Beginn (ich meine Version 0.1 oder so ähnlich) so etwas
$installer = new Something()
und beschlossen, die Logik zu ändern.Ich nehme dies an, weil das
<class>
Tag inconfig.xml
einigen Modulen (zB Mage_Catalog) enthalten ist. Versionen vor 1.6:Oder in Versionen 1.6+:
Ich benutze normalerweise
$this
anstelle von$installer
und ich hatte kein Problem (wenn das in irgendeiner Weise von Bedeutung ist).quelle
Hierbei handelt es sich um eine Konvention unbekannter und möglicherweise zweifelhafter Logik, die seit der frühesten öffentlichen Beta von 2007 vorliegt ( Vorschau B1 0.6.12383 ; Anmeldung erforderlich).
Es wird als Konvention verwendet, um sicherzustellen, dass die Klasse, die den Setup-Code ausführt, in Setup-Skripten konsistent mit Alias versehen ist. Während zum Beispiel sowohl das
Enterprise_GiftWrapping
als auch dasEnterprise_Rma
Modul ihre eigenen Setup-Klassen haben, ist jeder Alias$installer
einer Instanz zugeordnet,Mage_Catalog_Model_Resource_Setup
wenn der Produktentität Attribute hinzugefügt werden, z.app / code / core / Enterprise / GiftWrapping / sql / enterprise_giftwrapping_setup / install-1.11.0.0.php
quelle
Eine Sache, die ich an der Verwendung
$installer
, die ich wirklich hinzufügen möchte, mag , ist, dass es einfach ist, sie durch etwas anderes zu ersetzen oder sie außerhalb des Klassenbereichs auszuführen.1. Ersetzen:
2. Außerhalb des Anwendungsbereichs:
Natürlich mit
data-upgrade-0.1.1-0.1.2.php
:Das verhindert also
Fatal error: Using $this when not in object context
quelle
Ich denke, es ist aus früheren Tagen (<v.1.1). Aber um ehrlich zu sein, ich habe keine Ahnung. Ich finde es etwas besser lesbar ...
Wissen Sie ;-)
quelle