Frage

OK, mit Installationskripten 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 benutzen $this-> im gesamten Skript?

Irgendwelche Ideen, warum diese Konvention existiert?

War es hilfreich?

Lösung

Die Antwort ist viel einfacher. 2007 (und ich glaube, bis 2009, als Phpstorm anfing zu rocken), darf keine Ideen Inline -PHPDOC für die $this. Die Kernentwickler wollten jedoch eine Autoperation in der IDE haben. Deshalb verwendeten sie diese 2 Zeilen:

$installer = $this;
/* @var $installer <appropriate class> */

Einige Module haben eine eigene Setup -Klasse und hätte in Inline -PHPDOC verwendet werden müssen. Aber weil das Setup/Upgrade -Skript immer über "Kopieren/einfügen und ändern" erstellt wurde (und werden), können Sie möglicherweise Beispiele finden, wenn das Modul eine eigene Setup -Klasse hat (oder das EAV -Setup -Modell verwendet Mage_Eav_Model_Entity_Setup) aber Mage_Catalog_Model_Resource_Setup wird in Inline -PHPDOC im Upgrade -Skript verwendet.

Andere Tipps

Die älteste Version, die ich habe, ist 1.0. Sogar dann $installer = $this; existiert. Auch in den benannten Dateien upgrade-0.x.y-0.z.t Diese Linie existiert.

Meiner Meinung nach hatten sie, als sie anfingen (ich meine Version 0.1 oder so), so etwas wie $installer = new Something() Und sie beschlossen, die Logik zu ändern.
Ich nehme das wegen der an <class> Tag in der config.xml von einigen Modulen (zum Beispiel mage_catalog). Versionen vor 1.6:

<setup>
    <module>Mage_Catalog</module>
    <class>Mage_Catalog_Model_Resource_Eav_Mysql4_Setup</class>
</setup> 

Oder in Versionen 1.6+:

<setup>
    <module>Mage_Catalog</module>
    <class>Mage_Catalog_Model_Resource_Setup</class>
</setup>

Normalerweise benutze ich $this Anstatt von $installer Und ich hatte kein Problem (wenn das in irgendeiner Weise vorhanden ist).

Dies ist eine Konvention der unbekannten und möglicherweise zweifelhaften Logik, die seit der frühesten öffentlichen Beta von 2007 vorhanden ist (Vorschau B1 0.6.12383; Anmeldung erforderlich).

Es wird als Konvention verwendet, um sicherzustellen, dass die Klasse, die ein Setup -Code ausführt, in Setup -Skripten konsistent aliaisiert ist. Zum Beispiel, während beide beide Enterprise_GiftWrapping und Enterprise_Rma Module haben ihre eigenen Setup -Kurse, sie jeweils Alias $installer zu einer Instanz von Mage_Catalog_Model_Resource_Setup Beim Hinzufügen von Attributen zur Produkteinheit: z. B.: zB:

App/Code/Core/Enterprise/Geschenkwrapping/SQL/Enterprise_Giftwrapping_setup/install-1.11.0.0.php

<?php

$installer = $this;
/* @var $installer Enterprise_GiftWrapping_Model_Resource_Setup */
//... miscellaneous Enterprise_GiftWrapping setup logic

$installer = Mage::getResourceModel('catalog/setup', 'catalog_setup');
//... miscellaneous product entity attribute manipulation

Eine Sache, die ich gerne benutze $installer Ich möchte wirklich hinzufügen, dass es es einfach macht, es durch etwas anderes zu ersetzen oder es außerhalb des Klassenbereichs zu laufen.


1. Ersetzen:

$installer = $this;
/* @var $installer Mage_Core_Model_Resource_Setup */
// Do basic stuff

$installer = Mage::getSingleton('eav/entity_setup', 'eav_setup');
/* @var $installer Mage_Eav_Model_Entity_Setup */
/// Do stuff with attributes


2. Außenbereich:

$ php -a
php > require_once 'app/Mage.php';
php > Mage::init();
php > require 'app/code/local/Vendor/Module/data/vendormodule_setup/data-upgrade-0.1.1-0.1.2.php';
Upgrade worked!
Debug data dump: array(4) {
  'id' =>
  int(123)
  'foo' =>
  string(3) "bar"
}

Natürlich mit data-upgrade-0.1.1-0.1.2.php haben:

//$installer = $this;
$installer = Mage::getResourceSingleton('core/setup', 'vendormodule_setup');
/* @var $installer Mage_Core_Model_Resource_Setup */

// Do lots of stuff ...

echo "Upgrade worked!\n";
echo "Debug data dump: ";
var_dump($debug);

Das verhindert also Fatal error: Using $this when not in object context

Ich würde vermuten, dass es aus früheren Tagen ist (

Wir haben es immer so gemacht

Du weisst ;-)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit magento.stackexchange
scroll top