Possiamo chiamare i metodi modello di script di installazione di Magento?
-
16-10-2019 - |
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();
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?