El uso de superfluo (y potencialmente peligrosa) estándar de código de instalador de scripts

magento.stackexchange https://magento.stackexchange.com//questions/68387

Pregunta

Siempre he pensado que es una especie de epidemia de peste que se comportan los usuarios en un alto riesgo de manera que la introducción de $installer->startSetup() y $installer->stopSetup() de llamadas en el instalador de scripts.

Muchos de los de código de ejemplo del dado (aquí y en otros sitios, también encontrar en muchas de las extensiones que se pueden descargar) contiene el instalador de scripts de inicio con:

<?php

$installer = $this;

$installer->startSetup();

# some or many lines of code that do not 
# need $installer->startSetup(); at all for sure
#
# ...
#

$installer->endSetup();

Yo siempre estaba bajo la impresión de que esta es una mala práctica y, específicamente, no debe ser utilizada en el ejemplo de código, ya que introduce el riesgo innecesariamente suelto $installer->endSetup(); resulta incoherente de la base de datos de configuración después de la instalación, que puede poner en peligro el conjunto de la instalación.

Así que mi pregunta es, es así?Es este un claro caso para darle el asesoramiento a no hacer uso de estos métodos, a menos que estés 100% seguro de que usted los necesita?

Tengo la sensación de que aquellos que siempre están en el, porque el autor no sabe lo que son, pero ella piensa que tiene que estar allí, que es genial para el uso, que no hace daño y porque funciona de todos modos, continúa con esta arriesgada práctica.

También pensé que tal vez pida en meta, porque cuando me sugirió ediciones anteriores de el día de hoy, a partir de lo que veo en los comentarios en la revisión de muchos usuarios parecen no estar seguro sobre este punto.Me encantaría ver algunas aclaraciones y referencia acerca de.

¿Fue útil?

Solución

Usted es 100% correcto.El uso de $installer->startSetup(); es muy peligroso.
Especialmente cuando se utiliza en las secuencias de comandos que quitar atributos.Aprendí que la manera más difícil, cuando mi atributo se ha eliminado, pero los valores de los atributos quedaron como zombie registros en la base de datos.
Comparto su suposición de que esto se hace porque "que es como lo hacen en el núcleo".
Es lo mismo para esta como para la inclusión de

<all>
    <title>Allow everything</title>
</all> 

en la sección ACL y la adición de una versión para los archivos de diseño <layout version="0.1.0">.

pero el startSetup realmente puede hacer algo de daño.los otros 2 "tradiciones" que he mencionado son inofensivos.

Sólo para que quede claro para otras personas que terminan aquí.
startSetup ejecuta las siguientes consultas

SET SQL_MODE='';
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO'

Esto significa que el FK controles están desactivados, y se puede insertar el valor 0 para las columnas que son de PKs.(de forma similar a como se hace para el core_store tabla ).

endSetup simplemente invierte los efectos de startSetup.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a magento.stackexchange
scroll top