Domanda

Possiamo chiamare i metodi modello di script di installazione di Magento? Ho provato questo, script di installazione viene eseguito (nuova voce compare nel core_resource tabella del database), ma i metodi modello non vengono eseguite (ho aggiunto Mage:log('test'); all'interno metodi per controllare se sono stati sparati):

$installer = $this;
$installer->startSetup();

Mage::getModel('myextension/mymodel1')->doSomething();
Mage::getSingleton('myextension/mymodel2')->doSomethingElse();

$installer->endSetup();
È stato utile?

Soluzione

Si può fare, ma non funzionerà in tutti i casi.
Per questo tipo di problemi Magento ha la cartella data.
Per esempio, se si crea ed estensione e si dispone di questa installazione sql/module_setup/install-0.0.1.php script. Tenere in questo file script solo la tabella correlata.
Per la manipolazione dei dati creare questo file data/module_setup/install-0.0.1.php. Entrambi saranno exectuted quando si installa l'estensione.
Funziona allo stesso modo per gli script di aggiornamento. Basta tenere a mente per avere la stessa versione nei nomi dei file dalle cartelle sql e data.

Altri suggerimenti

"No voce di registro"! = "Metodi del modello non sono stati chiamati"

vengono eseguiti

??script di installazione molto presto inizializzazione dell'applicazione; infatti, vengono eseguiti prima che le impostazioni di configurazione utente (compresi tutto sotto dev) vengono riuniti in DOM configurazione. Uno sguardo al metodo di Mage::log() (link) spettacoli perché questo è un problema quando c'è un desiderio di voci di registro di scrittura negli script di configurazione:

public static function log($message, $level = null, $file = '', $forceLog = false)
{
    if (!self::getConfig()) {
        return;
    }

    try {
        $logActive = self::getStoreConfig('dev/log/active'); //this is the kicker
        if (empty($file)) {
            $file = self::getStoreConfig('dev/log/file');
        }
    }
    catch (Exception $e) {
        $logActive = true;
    }
                                    // v-- always false in setup scripts
    if (!self::$_isDeveloperMode && !$logActive && !$forceLog) {
        return;
    }
    //...
}

In script di installazione di dati, la configurazione negozio è stato fuso, e si potrebbe consentire il comportamento configurato per lavorare. Indipendentemente dalla configurazione dell'utente, i seguenti sono un paio di opzioni:

1. Abilitare la modalità sviluppatore nel vostro script di installazione:

<?php
$isDevMode = Mage::getIsDeveloperMode();
Mage::setIsDeveloperMode(true);
/*
    ...your setup script logic...
*/
//note that this global flag may have effects outside your script 
Mage::setIsDeveloperMode($isDevMode); //preserves original setting for the
                                      //remainder of the execution scope

2. Esplicitamente forzare la registrazione nello script:

<?php
Mage::log('foo',Zend_Log::INFO,'custom.log',true); //the last param forces logging
//And, since you are enumerating the params, why not write to a custom log?
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a magento.stackexchange
scroll top