运行安装脚本时强制执行Magento模块依赖项 在计算运行时配置值(如重写、事件等)时,MaGeto会考虑在APP/ETC/MuleStasePoEclipse模块.xml中声明的任何模块依赖项。但是,在对模块设置脚本进行排序时,它不会遵循类似的过程。设置脚本按字母顺序执行,当一个模块依赖于字母表后面模块中定义的设置脚本时,可能会导致问题

运行安装脚本时强制执行Magento模块依赖项 在计算运行时配置值(如重写、事件等)时,MaGeto会考虑在APP/ETC/MuleStasePoEclipse模块.xml中声明的任何模块依赖项。但是,在对模块设置脚本进行排序时,它不会遵循类似的过程。设置脚本按字母顺序执行,当一个模块依赖于字母表后面模块中定义的设置脚本时,可能会导致问题,magento,Magento,相关代码位于applyAllDataUpdatesMage\u Core\u Model\u Resource\u设置的方法中: $resources = Mage::getConfig()->getNode('global/resources')->children(); foreach ($resources as $resName => $resource) { <snip/> $setupClass->a

相关代码位于
applyAllDataUpdates
Mage\u Core\u Model\u Resource\u设置的方法中:

    $resources = Mage::getConfig()->getNode('global/resources')->children();
    foreach ($resources as $resName => $resource) {
        <snip/>
        $setupClass->applyDataUpdates();
    }
$resources=Mage::getConfig()->getNode('global/resources')->children();
foreach($resName=>$resource形式的资源){
$setupClass->applyDataUpdates();
}

是否有一个安全的/首选的/推荐的选项来确保在运行所需的脚本之前已经执行了所需的安装脚本?

我很想知道用例,但我看到模块依赖关系在这方面起作用,这是意料之中的,因为所有配置文件都是根据模块声明条目+依赖项规范加载的

POC

在1.5.1.1中验证:

app/etc/modules/a.xml


谢谢,本。你能确认哪个版本吗?这是在Community 1.5.x中观察到的,抱歉,应该在问题中指定。同意Ben的说法,设置的运行顺序与合并etc/config.xml的顺序相同。例如,与事件、布局、重写等方式相同。没有区别。乔纳森,我很好奇你是否最终确认了这一点。你在Twitter上提到版本是1.5-用完整的POC更新了我的答案。检查您的依赖性参数?
<?xml version="1.0" encoding="UTF-8"?>
<config>
    <modules>
        <Foo_Module>
            <active>true</active>
            <codePool>local</codePool>
        </Foo_Module>
        <Mage_Eav>
            <depends>
                <Foo_Module />
            </depends>
        </Mage_Eav>
    </modules>
</config>
<?xml version="1.0" encoding="UTF-8"?>
<config>
    <modules>
        <Foo_Module>
            <version>0.1</version>
        </Foo_Module>
    </modules>
    <global>
        <resources>
            <foo_module_setup>
                <setup>
                    <module>Foo_Module</module>
                </setup>
            </foo_module_setup>
        </resources>
    </global>
</config>
public function run($params)
{
    $options = isset($params['options']) ? $params['options'] : array();
    $this->baseInit($options);

    if ($this->_cache->processRequest()) {
        $this->getResponse()->sendResponse();
    } else {
        $this->_initModules();
        $this->loadAreaPart(Mage_Core_Model_App_Area::AREA_GLOBAL, Mage_Core_Model_App_Area::PART_EVENTS);

        if ($this->_config->isLocalConfigLoaded()) {
            $scopeCode = isset($params['scope_code']) ? $params['scope_code'] : '';
            $scopeType = isset($params['scope_type']) ? $params['scope_type'] : 'store';
            $this->_initCurrentStore($scopeCode, $scopeType);
            $this->_initRequest();
    /*Dump resource node here: */
            var_dump(Mage::getConfig()->getNode('global/resources')->children()); die;
            Mage_Core_Model_Resource_Setup::applyAllDataUpdates();
        }

        $this->getFrontController()->dispatch();
    }
    return $this;
}