在Magento中安装自定义模块期间是否存在访问商店配置的限制?这是问题
我有一个安装脚本:
<?php
$installer = $this;
$installer->startSetup();
$installer->run("
DROP TABLE IF EXISTS {$this->getTable('userpaymentban')};
CREATE TABLE IF NOT EXISTS {$this->getTable('userpaymentban')} (
`ban_id` INT NOT NULL AUTO_INCREMENT ,
`user_id` INT NOT NULL ,
`paymentmethod_id` VARCHAR(200) NOT NULL ,
`store_id` INT NOT NULL ,
PRIMARY KEY (`ban_id`) )
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8
COLLATE = utf8_general_ci;");
$defaultNotBannedPaymentMethods = array();
$paymentMethods = Mage::getSingleton('payment/config')->getAllMethods();
查询没问题,但最后一行导致抛出一些奇怪的东西:
Error in file: "/var/www/magentotest/magento161/app/code/local/Alpha/Userpaymentban/sql/userpaymentban_setup/mysql4-install-0.1.0.php" - Warning: Invalid argument supplied for foreach() in /var/www/magentotest/magento161/app/code/core/Mage/Payment/Model/Config.php on line 76
#0 /var/www/magentotest/magento161/app/code/core/Mage/Core/Model/Resource/Setup.php(645): Mage::exception('Mage_Core', 'Error in file: ...')
#1 /var/www/magentotest/magento161/app/code/core/Mage/Core/Model/Resource/Setup.php(421): Mage_Core_Model_Resource_Setup->_modifyResourceDb('install', '', '0.1.0')
#2 /var/www/magentotest/magento161/app/code/core/Mage/Core/Model/Resource/Setup.php(327): Mage_Core_Model_Resource_Setup->_installResourceDb('0.1.0')
#3 /var/www/magentotest/magento161/app/code/core/Mage/Core/Model/Resource/Setup.php(235): Mage_Core_Model_Resource_Setup->applyUpdates()
#4 /var/www/magentotest/magento161/app/code/core/Mage/Core/Model/App.php(412): Mage_Core_Model_Resource_Setup::applyAllUpdates()
#5 /var/www/magentotest/magento161/app/code/core/Mage/Core/Model/App.php(338): Mage_Core_Model_App->_initModules()
#6 /var/www/magentotest/magento161/app/Mage.php(640): Mage_Core_Model_App->run(Array)
#7 /var/www/magentotest/magento161/index.php(80): Mage::run('', 'store')
#8 {main}
代码中的Mage_Payment_Model_Config
抛出异常:
public function getAllMethods($store=null)
{
$methods = array();
$config = Mage::getStoreConfig('payment', $store);
echo "<pre>";
var_dump($config);
echo "</pre>";
foreach ($config as $code => $methodConfig) {
$data = $this->_getMethod($code, $methodConfig);
if (false !== $data) {
$methods[$code] = $data;
}
}
return $methods;
}
正如您所看到的,我已经添加了一些调试代码,但我从中收到的只是NULL
我的Magento没问题(我认为),因为当我使用Mage::getSingleton('payment/config')->getAllMethods()
模块安装范围(在导入的app/Mage.php
文件中)时,我会收到所有付款方式的清单。
答案 0 :(得分:9)
哈,我一直在寻找理由证明我的Magento U学生存在数据 - 安装/升级脚本,这是另一个很好的例子。
如果您查看初始化过程(从Mage::run()
的{{1}}开始),您将很快到达index.php
。在那里你会看到对Mage_Core_Model_App::run()
的电话。正是通过这种方法运行“常规”安装/升级脚本(通过_initModules()
)。稍后在Mage_Core_Model_Resource_Setup::applyAllUpdates()
中呼叫Mage_Core_Model_App::run()
。这是运行数据安装/数据升级脚本的地方,在商店对象通过Mage_Core_Model_Resource_Setup::applyAllDataUpdates()
初始化之后
这似乎是所谓的数据脚本的目的 - 你得到了加载配置的商店对象。
这些脚本的运行/命名就像“常规”安装/升级脚本一样,唯一的区别是CE&lt;的文件名是_initCurrentStore()
。 1.6和EE&lt; 1.11。对于1.6 / 1.11及更高版本,数据脚本会丢失mysql4前缀,并放在模块目录下的mysql4-data-[install|upgrade]-[version(s)].php
文件夹中(有关示例,请参阅data
dir)。