我们可以在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. 。安装扩展程序时,它们两个都将被登记。
它适用于升级脚本。只需记住在文件名中具有相同版本的 sqldata 文件夹。

其他提示

“没有日志输入”!=“未调用模型方法”

执行设置脚本 非常 在应用初始化的早期;实际上,它们是在用户配置设置之前运行的(包括 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归因
scroll top