Domanda

Ho sempre pensato che sia una specie di peste epidemia che gli utenti si comportano in modo ad alto rischio introducendo generacolitagcode e genera di $installer->startSetup() in script di installatore.

Molti del codice di esempio dato (qui e su altri siti, lo trovi anche in molte delle estensioni che puoi scaricare) contiene script dell'installatore che iniziano con:

<?php

$installer = $this;

$installer->startSetup();

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

$installer->endSetup();
.

Sono sempre stato sotto l'impressione che questa sia una cattiva pratica e in particolare non dovrebbe essere utilizzata nel codice in questo momento perché introduce il rischio di perdere inutilmente allentato $installer->stopSetup() con conseguente configurazione del database incoerente dopo l'installazione che può mettere in pericolo l'intera installazione. Quindi la mia domanda è, è così? È un caso cristallino per dare il consiglio di non utilizzare questi metodi a meno che tu non sia sicuro al 100% di averne bisogno?

Ho la sensazione che quelli siano sempre messi perché l'autore non sa cosa sono per, ma lei pensa che abbia bisogno di essere lì, è bello usarli, non può ferire e perché funziona comunque, continua con questa pratica rischiosa.

Ho anche pensato che forse chiedere a Meta perché quando ho suggerito le modifiche all'inizio di oggi, da quello che vedo nel feedback nella revisione molti utenti sembrano non essere sicuri su questo punto. Mi piacerebbe vedere alcuni chiarimenti e riferimenti a riguardo.

È stato utile?

Soluzione

Hai ragione al 100%. L'uso di $installer->startSetup(); è molto pericoloso.
Appositamente quando si utilizzalo negli script che rimuovono gli attributi. Ho imparato che il modo più duro, quando il mio attributo è stato cancellato, ma i valori per gli attributi sono stati lasciati come record zombie nel DB.
Condivido il tuo presupposto che questo sia fatto perché "è così che lo fanno nel nucleo".
È lo stesso per questo come per includere

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

nella sezione ACL e aggiungendo una versione ai file di layout <layout version="0.1.0">.

Ma il StartSetup può effettivamente fare qualche danno. Le altre 2 "tradizioni" che ho menzionato sono innocue.

solo per chiarire per le altre persone che finiscono qui.
startSetup esegue le seguenti query

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'
.

Significa che i controlli FK sono disabilitati e è possibile inserire il valore 0 per colonne per PKS. (simile a come è fatto alla tabella core_store in).

endSetup inverte semplicemente gli effetti del startSetup.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a magento.stackexchange
scroll top