Utilisation de code standard superflu (et potentiellement dangereux) dans les scripts d'installation

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

Question

J'ai toujours pensé que c'était une sorte de fléau épidémique que les utilisateurs se comportent de manière à haut risque en introduisant $installer->startSetup() et $installer->stopSetup() appels dans les scripts d’installation.

La plupart des exemples de code donnés (ici et sur d'autres sites, vous le trouvez également dans de nombreuses extensions que vous pouvez télécharger) contiennent des scripts d'installation commençant par :

<?php

$installer = $this;

$installer->startSetup();

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

$installer->endSetup();

J'ai toujours eu l'impression que c'était une mauvaise pratique et qu'elle ne devait spécifiquement pas être utilisée dans un exemple de code car cela introduit le risque de perdre inutilement $installer->endSetup(); ce qui entraîne une configuration de base de données incohérente après l'installation, ce qui peut mettre en danger l'ensemble de l'installation.

Alors ma question est : est-ce vrai ?Est-ce un cas parfaitement clair pour conseiller de ne pas utiliser ces méthodes à moins que vous ne soyez sûr à 100 % d'en avoir besoin ?

J'ai le sentiment que ceux-là sont toujours mis parce que l'auteur ne sait pas à quoi ils servent mais elle pense qu'il faut que ça soit là, c'est cool de les utiliser, ça ne peut pas faire de mal et parce que ça marche quand même, continue avec ça pratique.

J'ai aussi pensé à peut-être poser des questions sur la méta, car lorsque j'ai suggéré des modifications plus tôt dans la journée, d'après ce que je vois dans les commentaires en revue, de nombreux utilisateurs semblent incertains sur ce point.J'aimerais voir des éclaircissements et des références à ce sujet.

Était-ce utile?

La solution

Vous avez raison à 100%.En utilisant $installer->startSetup(); est très dangereux.
Surtout lorsque vous l'utilisez dans des scripts qui suppriment des attributs.J'ai appris cela à mes dépens, lorsque mon attribut a été supprimé mais que les valeurs des attributs ont été laissées sous forme d'enregistrements zombies dans la base de données.
Je partage votre hypothèse selon laquelle cela se fait parce que "c'est comme ça qu'ils le font au fond".
C'est la même chose pour cela que pour inclure

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

dans la section ACL et ajout d'une version aux fichiers de mise en page <layout version="0.1.0">.

mais startSetup peut en fait faire des dégâts.les 2 autres "traditions" que j'ai mentionnées sont inoffensives.

Juste pour que ce soit clair pour les autres personnes qui se retrouvent ici.
startSetup exécute les requêtes suivantes

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'

Cela signifie que les vérifications FK sont désactivées et que vous pouvez insérer la valeur 0 pour les colonnes qui sont des PK.(de la même manière que c'est fait pour le core_store tableau en ).

endSetup inverse simplement les effets de startSetup.

Licencié sous: CC-BY-SA avec attribution
Non affilié à magento.stackexchange
scroll top