Verwendung von überflüssigem (und potenziell gefährlichem) Standardcode in Installationsskripten

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

Frage

Ich habe immer gedacht, dass es sich um eine Art epidemische Seuche handelt, die durch Benutzerverhalten mit hohem Risiko verursacht wird $installer->startSetup() Und $installer->stopSetup() Aufrufe in Installationsskripten.

Viele der angegebenen Beispielcodes (hier und auf anderen Websites finden Sie sie auch in vielen Erweiterungen, die Sie herunterladen können) enthalten Installationsskripte, die mit Folgendem beginnen:

<?php

$installer = $this;

$installer->startSetup();

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

$installer->endSetup();

Ich hatte immer den Eindruck, dass dies eine schlechte Praxis ist und insbesondere nicht in Beispielcode verwendet werden sollte, da dadurch das Risiko besteht, dass unnötige Daten verloren gehen $installer->endSetup(); Dies führt nach der Einrichtung zu einer inkonsistenten Datenbankkonfiguration, die die gesamte Installation gefährden kann.

Meine Frage ist also: Ist das so?Ist dies ein klarer Fall für den Ratschlag, diese Methoden nicht zu verwenden, es sei denn, Sie sind 100 % sicher, dass Sie sie benötigen?

Ich habe das Gefühl, dass diese immer eingefügt werden, weil die Autorin nicht weiß, wofür sie sind, aber sie meint, dass es da sein muss, es ist cool, sie zu verwenden, es kann nicht schaden und weil es sowieso funktioniert, ist es riskant, damit weiterzumachen üben.

Ich dachte auch darüber nach, vielleicht nach Meta zu fragen, denn als ich heute früher Änderungen vorschlug, schienen viele Benutzer, wie ich im Feedback in der Rezension gesehen habe, in diesem Punkt unsicher zu sein.Ich würde gerne etwas Klarstellung und Hinweise dazu sehen.

War es hilfreich?

Lösung

Du hast 100 % Recht.Benutzen $installer->startSetup(); ist sehr gefährlich.
Insbesondere bei der Verwendung in Skripten, die Attribute entfernen.Ich habe das auf die harte Tour gelernt, als mein Attribut gelöscht wurde, die Werte für die Attribute jedoch als Zombie-Datensätze in der Datenbank zurückblieben.
Ich teile Ihre Annahme, dass dies geschieht, weil „sie es im Kern so machen“.
Hier gilt das Gleiche wie beim Einbinden

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

im ACL-Abschnitt und Hinzufügen einer Version zu den Layoutdateien <layout version="0.1.0">.

aber das startSetup kann tatsächlich Schaden anrichten.Die anderen beiden „Traditionen“, die ich erwähnt habe, sind harmlos.

Nur um es anderen klar zu machen, die hier landen.
startSetup führt die folgenden Abfragen aus

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'

Das bedeutet, dass die FK-Prüfungen deaktiviert sind und Sie den Wert eingeben können 0 für Spalten, die PKs sind.(Ähnlich wie es mit dem gemacht wird core_store Tabelle in ).

endSetup kehrt nur die Auswirkungen von um startSetup.

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