【问题标题】:Uncaught TypeError: Argument 1 passed to Mage_Core_Model_Store_Group::setWebsite() must be an instance of Mage_Core_Model_Website, null given未捕获的类型错误:传递给 Mage_Core_Model_Store_Group::setWebsite() 的参数 1 必须是 Mage_Core_Model_Website 的实例,给定 null
【发布时间】:2018-03-28 21:08:30
【问题描述】:

Magneto 1.9.3 移至 PHP 版本 7.0.23 的新服务器

我将我的 Magento 网站服务器更新为新的 PHP 版本;现在是 7.0.23,但在此之前它工作正常。现在它给了我这个错误:

致命错误:未捕获的类型错误:参数 1 传递给 Mage_Core_Model_Store_Group::setWebsite() 必须是 Mage_Core_Model_Website,null 给定,调用

我也尝试了 php 7 的 inchoo 补丁,但没有任何效果。 https://github.com/Inchoo/Inchoo_PHP7

【问题讨论】:

  • 该行特别读取 public function setWebsite(Mage_Core_Model_Website $website) - 接受 PHP 7 中的 null 必须声明 $website 可以为空(例如 setWebsite(Mage_Core_Model_Website $website = null)。Inchoo 补丁安装正确吗?Magento 1.9x 实际上并不是开箱即用的 PHP7 兼容。
  • 是的补丁安装正确@CD001
  • @CD001 您的参考对您有很大帮助,谢谢...

标签: php magento magento-1.9 php-7


【解决方案1】:

我尝试了@cd001在评论中提到的方法:

首先我更新了文件app/code/core/Mage/Core/Model/Store/Group.php。在该文件中,我刚刚替换了以下行:

public function setWebsite(Mage_Core_Model_Website $website)

public function setWebsite(Mage_Core_Model_Website $website = null)

然后我得到另一个错误:

Fatal error: Uncaught Error: Function name must be a string in 
app\code\core\Mage\Core\Model\Layout.php:555 Stack trace: #0 
app\code\core\Mage\Core\Controller\Varien\Action.php(390): Mage_Core_Model_Layout->getOutput() #1 
app\code\core\Mage\Cms\Helper\Page.php(137): Mage_Core_Controller_Varien_Action->renderLayout() #2 
app\code\core\Mage\Cms\Helper\Page.php(52): Mage_Cms_Helper_Page->_renderPage(Object(Mage_Cms_IndexController), 'home') #3 
app\code\core\Mage\Cms\controllers\IndexController.php(45): Mage_Cms_Helper_Page->renderPage(Object(Mage_Cms_IndexController), 'home') #4 
app\code\core\Mage\Core\Controller\Varien\Action.php(418): Mage_Cms_IndexController->indexAction() #5 
app\code\core\Mage\Core\Controller\Varien\Router\Standard.php(254): Mage_Core_Controller_Varien_Action->dispatch('index') #6 
app\code\core\Mage\Core\Model\Layout.php on line 555

为此,我更新了文件:app/code/core/Mage/Core/Model/Layout.php。在该文件中,我替换了以下行:

$out .= $this->getBlock($callback[0])->$callback[1]();

$out .= $this->getBlock($callback[0])->{$callback[1]}();

现在一切正常。

【讨论】:

  • 我建议你在本地覆盖/模块中更新 app/code/core/Mage/Core/Model/Store/Group.php。当您再次更新 Magento 时,此更改可能会丢失。
【解决方案2】:

看起来当前版本的 Inchoo_PHP7 仅适用于最新版本的 Magento。阅读他们的发行说明https://github.com/Inchoo/Inchoo_PHP7/releases

我的旧版本 Inchoo_PHP7 包含您上面提到的文件的所有修复。喜欢这个……

<core>
    <rewrite>
        <layout>Inchoo_PHP7_Model_Layout</layout>
    </rewrite>
</core>

【讨论】:

    【解决方案3】:

    使用 SQL

    SET FOREIGN_KEY_CHECKS=0;
    UPDATE `core_store` SET store_id = 0 WHERE code='admin';
    UPDATE `core_store_group` SET group_id = 0 WHERE name='Default';
    UPDATE `core_website` SET website_id = 0 WHERE code='admin';
    UPDATE `customer_group` SET customer_group_id = 0 WHERE customer_group_code='NOT LOGGED IN';
    SET FOREIGN_KEY_CHECKS=1;
    

    清除缓存! (删除magento/var/chache/中的所有内容)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-29
      • 2013-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-19
      • 1970-01-01
      • 2023-03-30
      相关资源
      最近更新 更多