致命错误:未捕获的错误:在 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.tpl
(module3.php
的模板)
-/controllers/front/products.php
(本模块的控制器)
-/views/templates/front/products.tpl
(我的控制器的模板)
- 还有/controllers/front/take_product.php
(将由products.tpl
由ajax
调用)。
我的/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'