Можем ли мы назвать методы модели в сценариях настроек Magento?

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

  •  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?
Лицензировано под: CC-BY-SA с атрибуция
Не связан с magento.stackexchange
scroll top