Ok, usando scripts de instalación parece haber una convención extraña para usar lo siguiente:
$installer = $this;
Realmente no entiendo esto, ya que es completamente redundante.
¿Por qué no solo usarlo en $this->
todo el script?
¿Alguna idea de por qué existe esta convención?
magento-1
installation
resource-model
setup-script
install-script
Marty Wallace
fuente
fuente
Respuestas:
La respuesta es mucho más simple. En 2007 (y creo que hasta 2009, cuando PhpStorm comenzó a funcionar), ningún IDE permitió proporcionar phpdoc en línea
$this
. Pero los desarrolladores principales querían tener autocompletado en IDE. Por eso usaron estas 2 líneas:Algunos módulos tienen su propia clase de configuración y deberían haberse utilizado en phpdoc en línea. Pero debido a que el script de configuración / actualización siempre se creó (y se crea) a través de "copiar / pegar alguno existente y cambiar", puede encontrar ejemplos cuando el módulo tiene su propia clase de configuración (o usa el modelo de configuración eav
Mage_Eav_Model_Entity_Setup
) peroMage_Catalog_Model_Resource_Setup
se usa en phpdoc en línea en la actualización guión.fuente
La versión más antigua que tengo es la 1.0. Incluso entonces
$installer = $this;
existió. Incluso en los archivos llamadosupgrade-0.x.y-0.z.t
esta línea existe.En mi opinión, cuando comenzaron (me refiero a la versión 0.1 o algo así) tenían algo como
$installer = new Something()
y decidieron cambiar la lógica.Supongo esto debido a la
<class>
etiqueta enconfig.xml
algunos módulos (Mage_Catalog por ejemplo). Versiones anteriores a 1.6:O en las versiones 1.6+:
Usualmente uso en
$this
lugar de$installer
y no tuve ningún problema (si eso importa de alguna manera).fuente
Esta es una convención de lógica desconocida y posiblemente dudosa presente desde la primera versión beta pública de 2007 ( Vista previa B1 0.6.12383 ; se requiere inicio de sesión).
Se usa como una convención para garantizar que la clase que está ejecutando el código de instalación tenga un alias constante en los scripts de configuración. Por ejemplo, si bien los módulos
Enterprise_GiftWrapping
yEnterprise_Rma
tienen sus propias clases de configuración, cada alias$installer
a una instancia deMage_Catalog_Model_Resource_Setup
cuando agrega atributos a la entidad del producto, por ejemplo:app / code / core / Enterprise / GiftWrapping / sql / enterprise_giftwrapping_setup / install-1.11.0.0.php
fuente
Una cosa que me gusta de usar
$installer
que realmente quiero agregar es que hace que sea fácil reemplazarlo por otra cosa o ejecutarlo fuera del alcance de la clase.1. Reemplazándolo:
2. Alcance externo:
Por supuesto con
data-upgrade-0.1.1-0.1.2.php
tener:Entonces esto previene
Fatal error: Using $this when not in object context
fuente
Supongo que es de días anteriores (<v.1.1). Pero para ser honesto, no tengo idea. Creo que es un poco mejor legible ...
Ya sabes ;-)
fuente