我们可以在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?