我的商店没有返回代码ID并打破404错误。 Magento的

时间:2011-09-12 15:40:28

标签: php zend-framework magento

我知道问题是什么,但我不知道如何解决它。我刚刚在本地迁移了我的magento商店,我猜可能在传输数据库时可能丢失了一些数据。数据库非常大。无论如何,当我登录我的管理页面时,我收到404错误,找不到页面。

我调试了这个问题并开始接线。 Mage / Core / Model / App.php中抛出异常。第759行将被执行。以下是一个片段。

法/核心/型号/ App.php

    if (empty($this->_stores[$id])) {
        $store = Mage::getModel('core/store');
        /* @var $store Mage_Core_Model_Store */
        if (is_numeric($id)) {
            $store->load($id); // THIS ID IS FROM Mage_Core_Model_App::ADMIN_STORE_ID and its empty which causes the error
        } elseif (is_string($id)) {
            $store->load($id, 'code');
        }

        if (!$store->getCode()) { // RETURNS FALSE HERE BECAUSE NO ID Specified
            $this->throwStoreException();
        }
        $this->_stores[$store->getStoreId()] = $store;
        $this->_stores[$store->getCode()] = $store;
    }

存储返回null,因为$ id为null因此它不会加载任何模型,这解释了为什么在调用getCode()时返回false的原因

enter image description here

[编辑] 如果您需要澄清,请在投票之前提出更多要求。请记住,我仍然试图获得帮助而不被忽视。

我使用的是1.4.1.1版。当我输入admin的URL时,我得到一个404页面。我彻底浏览了代码,发现Model MAGE_CORE_MODEL_STORE :: getCode();返回Null,触发异常。并结束脚本。我没有任何其他细节。我通过检查数据库进一步解决了这个问题,这就是屏幕截图。显示Code Colunn中存在实际数据。

所以我的问题是,当列显然有一个值时,为什么Model会返回一个空列。我该怎么做才能进一步排除故障并找出其无效的原因

[编辑更新新]

我做了一些研究。返回NULL的原因是因为传递了商店ID为空

Mage::getStoreConfigFlag('web/secure/use_in_adminhtml', Mage_Core_Model_App::ADMIN_STORE_ID); // THIS IS THE ID being specified

Mage_Core_Model_App :: ADMIN_STORE_ID中没有值,因此此方法会抛出异常。不知道为什么要解决这个问题。

2 个答案:

答案 0 :(得分:1)

您需要将admin商店,网站和store_group的ID更改为零。这是由于mysql导入没有重置自动增量值,Magento将后备商店ID硬编码为零。

有关详细信息,请参阅this answer

答案 1 :(得分:0)

我知道这是一篇较老的帖子,但是在解决这个问题之前的几天里我一直在努力解决这个问题。我不确定这是否与数据库备份的方式有关,但当我尝试从备份导入Magento 1.9.x数据库时,我遇到了各种各样的问题。我能够按照上述步骤修复404,但随后有大量其他ID在整个数据库中出现错误,导致产品,菜单等各种问题。解决方案是在开头添加这个SQL文件

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT;
SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS;
SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION;SET NAMES utf8;
SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0; 
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO';
SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0;

并将其添加到文件的末尾

SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT;
SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS;
SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION;
SET SQL_NOTES=@OLD_SQL_NOTES;

导入之前。一旦我这样做,导入进行得很顺利,所有ID都应该是这样。希望这可以帮助别人摆脱困境,因为它对我有用。

谢谢,