-1
4

1 回答 1

4

此错误消息让您知道 Magento 尝试加载Mage_Api模块的声明,但找不到该模块的声明Mage_Core。由于Mage_Api配置为依赖于这个模块,Magento 放弃了。

发生这种情况的原因有很多,而且您的问题中没有足够的信息来推断发生了什么。您需要自己进一步调试此问题。

首先,此异常源自以下方法

#File: app/code/core/Mage/Core/Model/Config.php
protected function _sortModuleDepends($modules)
{
    ...
}    

$modules数组包含app/etc/modules为您的系统加载的信息。您的异常出现在第一个循环中

foreach ($modules as $moduleName => $moduleProps) {
    $depends = $moduleProps['depends'];
    foreach ($moduleProps['depends'] as $depend => $true) {
        if ($moduleProps['active'] && ((!isset($modules[$depend])) || empty($modules[$depend]['active']))) {
            Mage::throwException(
                Mage::helper('core')->__('Module "%1$s" requires module "%2$s".', $moduleName, $depend)
            );
        }
        $depends = array_merge($depends, $modules[$depend]['depends']);
    }
    $modules[$moduleName]['depends'] = $depends;
}

检查的内容$modules。如果没有Mage_Core密钥(我怀疑),这意味着 Magento 无法加载app/etc/modules声明Mage_Core. 默认情况下这是Mage_All.xml. 检查此文件的权限,并检查它是否是有效的 XML。如果粗略检查通过,此文件将加载到_loadDeclaredModules

protected function _loadDeclaredModules($mergeConfig = null)
{
    //...
    foreach ($moduleFiles as $file) {
        $fileConfig->loadFile($file);
        $unsortedConfig->extend($fileConfig);
    }    
    $moduleDepends = array();
    foreach ($unsortedConfig->getNode('modules')->children() as $moduleName => $moduleNode) {
        if (!$this->_isAllowedModule($moduleName)) {
            continue;
        }

        $depends = array();
        if ($moduleNode->depends) {
            foreach ($moduleNode->depends->children() as $depend) {
                $depends[$depend->getName()] = true;
            }
        }
        $moduleDepends[$moduleName] = array(
            'module'    => $moduleName,
            'depends'   => $depends,
            'active'    => ('true' === (string)$moduleNode->active ? true : false),
        );
    }

    //...
}

确定Mage_Core节点丢失的原因,您将找到问题的解决方案。

于 2012-11-06T20:06:29.817 回答