【问题标题】:opencart 2.0.3.1 to 2.3.0.2 erroropencart 2.0.3.1 到 2.3.0.2 错误
【发布时间】:2016-11-09 13:19:01
【问题描述】:
升级后出现此错误。谁能帮帮我。
致命错误:未捕获的异常“异常”和消息“错误:可能
不加载模型总数!在
C:\xampp\htdocs\deleteme\system\engine\loader.php:169 堆栈跟踪:#0
【内部函数】:Loader->{closure}(Array, Array) #1
C:\xampp\htdocs\deleteme\system\engine\proxy.php(25):
call_user_func_array(Object(Closure), Array) #2
C:\xampp\htdocs\deleteme\catalog\controller\common\cart.php(37):
代理->__call('getTotal', Array) #3
C:\xampp\htdocs\deleteme\catalog\controller\common\cart.php(37):
Proxy->getTotal(Array) #4【内部函数】:
ControllerCommonCart->index(Array) #5
C:\xampp\htdocs\deleteme\system\engine\action.php(51):
call_user_func_array(Array, Array) #6
C:\xampp\htdocs\deleteme\system\engine\loader.php(24):
动作->执行(对象(注册表),数组)#7
C:\xampp\htdocs\deleteme\catalog\controller\common\header.php(129):
Loader->controller('common/cart') #8【内部函数】:
ControllerCommonHeader->index(Array) #9
C:\xampp\htdocs\deleteme\system\engine\action.php(51):
call_user_func_array(Array, Array) #10 C:\xampp\ in
C:\xampp\htdocs\deleteme\system\engine\loader.php 在第 169 行
【问题讨论】:
标签:
php
opencart2.x
opencart2.3
【解决方案1】:
升级问题是在他们的论坛here 中报告的错误和解决方案。
摘要(为后代复制/粘贴):
BUG:错误:无法加载模型总数!
两部分错误。第一部分:事件兼容性切断了太多的部分
尝试加载旧扩展格式时的路线。前任。
“extension/total/sub_total/getTotal”路线变成
“total/sub_total”而不是“total/sub_total/getTotal”。这引起
它尝试加载没有名称的模型并引发异常。部分
二,这种兼容性在路由时加载良好
“extension/total/subtotal”,但也在路线加载时加载
“扩展/总计/sub_total/getTotal”。我觉得这个事件不应该
为兼容性触发,因为它是一个 getTotal 是一个函数
调用,而不是模型加载。这会导致验证失败并尝试
加载缺少其他位并抛出的 2.2.x 版本
不同的错误。还没弄清楚为什么函数调用会发生
沿着事件路径。但基本上是向后支持的尝试
与 2.2 模组的兼容性会导致问题。
2 个解决方案
FIX 1:放弃 2.2.x 兼容性并删除以下内容
剩余文件夹:
catalog/model/total
catalog/model/payment
catalog/controller/payment
catalog/model/shipping
catalog/controller/module
admin/controller/total
admin/controller/payment
admin/controller/shipping
admin/controller/module
FIX 2:添加一个 hack 以在函数调用时绕过事件
“getTotal”、“getMethod”或“getQuote”被传入。这是
实验性但至少应该恢复对 2.2.x 模组的支持
现在。这不是永久修复。只是一个解决方法。
编辑:目录/控制器/事件/compatibility.php 查找:
'model/' . $route. '.php'
替换为:
'model/' . ((strpos($route,'get') !== false) ? dirname($route) : $route) . '.php'
这应该让“extension/total/sub_total”之类的路由工作但阻塞
在目录上失败的“extension/total/sub_total/getTotal”调用
检查。