致命错误:未捕获的错误:在 prestashop 中找不到类“Db”

Posted

技术标签:

【中文标题】致命错误:未捕获的错误:在 prestashop 中找不到类“Db”【英文标题】:Fatal error: Uncaught Error: Class 'Db' not found in prestashop 【发布时间】:2017-12-24 11:16:21 【问题描述】:

对不起我的英语。

我是<i>prestashop</i> 的初学者,我仍在努力了解更多信息。

我在 /modules 目录中创建了一个模块 (/module3)。这有下一个文件:

-module3.php(本模块的主php文件) -/views/templates/hook/module3.tplmodule3.php 的模板) -/controllers/front/products.php(本模块的控制器) -/views/templates/front/products.tpl(我的控制器的模板) - 还有/controllers/front/take_product.php(将由products.tplajax 调用)。

我的/views/templates/front/products.tpl 有下一个 ajax:

` 功能打印产品 (id_product) var form_data = new FormData(); form_data.append('id_product', id_product); 采取(功能(rezultat) $("#product_div").html(rezultat); ); 函数采取(rezultat) $.ajax( 网址:“http://127.0.0.1/prestashop/modules/module3/controllers/front/take_product.php”, 数据类型:'文本', 缓存:假, 内容类型:假, 处理数据:假, 数据:form_data, 类型:'发布', ).done(函数(输出) rezultat(输出); ); `

我的/controllers/front/take_product.php 有下一个代码:

` @ini_set('display_errors', 'on'); $sql = 'SELECT * FROM ps_product WHERE id_product="'.(int)$_POST["id_product"].'"'; $result = Db::getInstance()->execute($sql); 回显$结果; `

这就是/views/templates/front/products.tpl 接收和打印的内容:

` 致命错误:未捕获错误:在 /var/www/html/prestashop/modules/module3/controllers/front/take_product.php:6 中找不到类“Db”:堆栈跟踪:#0 main 抛出 /var/www/html/prestashop/modules/module3/controllers/front/take_product.php 第 6 行 `

也许你认为我需要/controllers/front/take_product.php 中的类控制器。 这就是为什么我也用下一个代码更改了我的/controllers/front/take_product.php

` @ini_set('display_errors', 'on'); 类 Module3take_productsModuleFrontController 扩展 模块前端控制器 公共函数 initContent() 父::initContent(); $sql = 'SELECT * FROM ps_product WHERE id_product="'.(int)$_POST["id_product"].'"'; $result = Db::getInstance()->execute($sql); 回显$结果; `

但现在/views/templates/front/products.tpl 接收并打印另一个错误:

` 致命错误:在 /var/www/html/prestashop/modules/module3/controllers/front/take_product.php 第 6 行中找不到类“ModuleFrontController” `

那么...你有什么想法吗?

【问题讨论】:

【参考方案1】:

您正在尝试直接在您的 ajax 中访问 take_product.php。 不要对 url 进行硬编码,而是在 tpl 中使用 Link 对象:

url: "$link->getModuleLink('Module3', 'take_products', [], true)|escape:'html':'UTF-8'",

这样,它将有正确的 url 来加载 Prestashop 并使用模块控制器。

只是提醒另一个解决方案,但不是那么正确。您不需要它来扩展 ModuleFrontController(正如您之前尝试过的那样),只需在文件开头使用“加载”prestashop:

require_once(dirname(__FILE__) .'/../../../../config/config.inc.php'); 

cron_currency_rates.php 使用它而不是控制器。但是,同样,这不是最好的方法。只是想指出区别。

【讨论】:

我在“$link->getModuleLink('Module3', 'take_product', [], true)”中修改了 url(来自 products.tpl)并让控制器(take_product .php) 怎么样。但是现在我在控制台中出现另一个错误:POST [lonk](127.0.0.1/prestashop/…404) (Not Found) 将您的控制器名称更改为 Module3Take_productModuleFrontController,(您的班级中有复数)。并删除缓存/class_index.php 我把你的网址和我让 take_product.php 作为类控制器。不,错误与我的介绍相同:致命错误:第 5 行的 /var/www/html/prestashop/modules/module3/controllers/front/take_product.php 中找不到 Class 'ModuleFrontController' 我的课是这样开始的:class Module3take_productModuleFrontController extends ModuleFrontController 配置文件夹不是设置

以上是关于致命错误:未捕获的错误:在 prestashop 中找不到类“Db”的主要内容,如果未能解决你的问题,请参考以下文章

Laravel - 致命错误:未捕获的错误:找不到类'Auth'

致命错误:未捕获的错误:找不到类“App\Config”

致命错误:未捕获的错误:未找到类“用户名”

致命错误:未捕获的异常 PAYPAL

致命错误:未捕获的错误:在 null 上调用成员函数 select()

突然出现Apache错误?致命错误:未捕获错误