Magento Store在自定义模块安装期间配置奇怪的行为

alp*_*uri 3 module magento

在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();
Run Code Online (Sandbox Code Playgroud)

查询没问题,但最后一行导致抛出一些奇怪的东西:

    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}
Run Code Online (Sandbox Code Playgroud)

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;
}
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我已经添加了一些调试代码,但我收到的所有内容都是 NULL

我的Magento可以(我认为),因为当我使用Mage::getSingleton('payment/config')->getAllMethods()模块安装范围(在导入的文件中app/Mage.php)时,我会收到一份很好的所有付款方式列表.

ben*_*rks 9

哈,我一直在寻找合理证明我的Magento U学生存在数据安装/升级脚本的理由,这是另一个很好的例子.

如果你看看初始化过程(开始Mage::run()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().这就是数据安装/数据升级脚本运行,这是刚过存储对象通过初始化_initCurrentStore().

这似乎是所谓的数据脚本的目的 - 您获得加载其配置的商店对象.

这些脚本的运行/命名就像"常规"安装/升级脚本一样,唯一的区别是文件名是mysql4-data-[install|upgrade]-[version(s)].phpCE <1.6和EE <1.11.对于1.6/1.11及更高版本,数据脚本会丢失mysql4前缀,并放在data模块目录下的文件夹中(Mage_Catalog有关示例,请参阅dir).