Можем ли мы назвать методы модели в сценариях настроек Magento?
-
16-10-2019 - |
Вопрос
Можем ли мы назвать методы модели в сценариях настроек Magento? Я попробовал это, выполняется скрипт «Настройка» (новая запись появляется в таблице базы данных core_resource
) но методы модели не выполняются (я добавил Mage:log('test');
Внутренние методы, чтобы проверить, были ли они уволены):
$installer = $this;
$installer->startSetup();
Mage::getModel('myextension/mymodel1')->doSomething();
Mage::getSingleton('myextension/mymodel2')->doSomethingElse();
$installer->endSetup();
Решение
Вы можете сделать это, но это не будет работать во всех случаях.
Для такого рода проблем в Magento data
папка.
Например, если вы создаете и расширяете, и у вас есть этот сценарий установки sql/module_setup/install-0.0.1.php
. Анкет Держите в этом файле только сценарии, связанные с таблицей.
Для манипулирования данными создайте этот файл data/module_setup/install-0.0.1.php
. Анкет Оба они будут выявлены при установке расширения.
Это работает так же для обновления сценариев. Просто имейте в виду, чтобы иметь ту же версию в именах файлов из sql
а также data
папки.
Другие советы
"Нет записи журнала"! = "Модельные методы не назывались"
Сценарии настройки выполняются очень В начале инициализации приложения; Фактически, они запускаются перед настройками конфигурации пользователя (включая все под dev
) объединены в конфигурацию DOM. Взгляд на Mage::log()
Метод (ссылка) Показывает, почему это проблема, когда есть желание записать записи журналов в сценариях настройки:
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;
}
//...
}
В сценариях настройки данных конфигурация хранилища была объединена, и вы можете позволить настроенному поведению работать. Независимо от конфигурации пользователя, ниже приведены пара вариантов:
1. Включите режим разработчика в сценарии настроек:
<?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. Явно заставляя регистрацию в вашем скрипте:
<?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?