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

Magento存储配置自定义模块安装期间的奇怪行为,magento,module,Magento,Module,在Magento中安装自定义模块期间,是否存在访问存储配置的限制?问题就在这里 我有一个安装脚本: <?php $installer = $this; $installer->startSetup(); $installer->run(" DROP TABLE IF EXISTS {$this->getTable('userpaymentban')}; CREATE TABLE IF NOT EXISTS {$this-&

在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();
在代码中的
Mage\u Payment\u Model\u 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;
}
公共函数getAllMethods($store=null)
{
$methods=array();
$config=Mage::getStoreConfig('payment',$store);
回声“;
变量转储($config);
回声“;
foreach($config as$code=>$methodConfig){
$data=$this->\u getMethod($code,$methodConfig);
if(false!==$data){
$methods[$code]=$data;
}
}
返回$methods;
}
正如您所看到的,我已经添加了一些调试代码,但是我从中得到的只是
NULL


我的Magento还可以(我想),因为当我在模块安装范围之外使用
Mage::getSingleton('payment/config')->getAllMethods()
(在导入了
app/Mage.php
的文件中)时,我收到了一个很好的所有支付方法的列表。

Ha,我一直在寻找理由证明我的Magento U学生可以使用数据安装/升级脚本,这是另一个很好的例子

如果查看初始化过程(从
index.php
中的
Mage::run()
开始),您将很快到达
Mage\u Core\u Model\u App::run()
。在那里,您将看到对
\u initModules()
的调用。正是通过这种方法运行“常规”安装/升级脚本(通过
Mage\u Core\u Model\u Resource\u Setup::applyAllUpdates()
)。稍后在
Mage\u Core\u Model\u App::run()
中调用
Mage\u Core\u Model\u Resource\u Setup::applyAllDataUpdates()
。这是运行数据安装/数据升级脚本的地方,在通过
\u initCurrentStore()
初始化存储对象之后

这似乎就是所谓的数据脚本的目的——您在加载配置的情况下获得store对象


这些脚本与“常规”安装/升级脚本一样运行/命名,唯一的区别是文件名是
mysql4 data-[install | upgrade]-[version(s)]。php
用于CE<1.6和EE<1.11。对于1.6/1.11及更高版本,数据脚本会丢失mysql4前缀,并被放在模块目录下的
data
文件夹中(例如,请参见
Mage_Catalog
dir)。

Ah,这个答案救了我一命。在配置模型中挖掘了大约15分钟,试图找到这个#Benmarks ForctToWhat如果我要添加新的数据升级脚本?我应该增加config.xml中文件的版本和版本号吗?我已经添加了data/{module\u name}\u setup/data-upgrade-0.1.8-0.1.9.php(这是模块的递增版本号),并将config.xml中的版本号更新为0.1.9,清除了缓存,脚本没有执行。有什么想法吗Thanks@RaduBarbu检查
core\u resource
表中的记录,查看版本号是否已更改。如果没有,请清除缓存并再次检查(脚本应运行)。如果记录已更改,则路径或文件名存在问题(此处看起来正确)。此外,如果您的Magento版本<1.4,则数据升级脚本不适用。@benmarks解决了此问题。。。这是一个脚本缓存问题:(
    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;
}