我在nginx服务器上的php 7.1.7上安装了prestashop 1.7.2.0。
我正在为prestashop编写一个模块,如果我可以使用prestashop API for PHP-CLI来测试我的模块的安装和操作,那么对我来说会更快。
特别是现在我需要Db::getIntance()
才能工作。
到目前为止,我创建了以下脚本:
<?php
const PRESTASHOP_DIR = __DIR__.DIRECTORY_SEPARATOR.'..'.DIRECTORY_SEPARATOR.'..'.DIRECTORY_SEPARATOR.'..'.DIRECTORY_SEPARATOR.'prestashop';
spl_autoload_register(function ($className) {
if (0 === strpos($className, 'InstallControllerConsole')) {
$fileName = strtolower(str_replace('InstallControllerConsole', '', $className));
require_once PRESTASHOP_DIR.'/controllers/console/' . $fileName . '.php';
}
if (0 === strpos($className, 'InstallControllerHttp')) {
$fileName = strtolower(str_replace('InstallControllerHttp', '', $className));
require_once PRESTASHOP_DIR.'/controllers/http/' . $fileName . '.php';
}
if (file_exists(PRESTASHOP_DIR.'/classes/' . $className . '.php')) {
require_once PRESTASHOP_DIR.'/classes/' . $className . '.php';
}
if (0 === strpos($className,'Db') && file_exists(PRESTASHOP_DIR.'/classes/db/'.$className.'.php')) {
require_once PRESTASHOP_DIR.'/classes/db/'.$className.'.php';
}
});
require_once(PRESTASHOP_DIR.DIRECTORY_SEPARATOR.'classes'.DIRECTORY_SEPARATOR.'db'.DIRECTORY_SEPARATOR.'DbPDO.php');
require_once(PRESTASHOP_DIR.DIRECTORY_SEPARATOR.'config'.DIRECTORY_SEPARATOR.'config.inc.php');
require_once(PRESTASHOP_DIR.DIRECTORY_SEPARATOR.'vendor'.DIRECTORY_SEPARATOR.'autoload.php');
$a = Db::getInstance();
我收到以下错误:
PHP Fatal error: Class 'Db' not found in /Volumes/osx-storage/projects/luckylee/prestashop/prestashop/classes/db/DbPDO.php on line 32
当我尝试为Db
类grep prestashop项目时,我只能看到一个抽象类,这意味着其他东西扩展并初始化它。
任何想法如何解决这个问题?
似乎我指向一个只是解压缩但未安装的pestashop目录。当我把它指向一个正确配置prestashop的目录时,只需要config.inc.php
就足够了......但是
当我对我创建的表进行插入时,没有任何反应,并且它不会返回错误。有任何想法吗?
我运行命令:
Db::getInstance()->insert(_DB_PREFIX_.'tuxinmod_cartype',['id_tuxmod_cartype'=>0],true);
并且数据库中没有任何变化。为什么? :)
我创建了表ps_tuxinmod_cartype ..但我仍然会遇到错误而且我不知道。我错过了什么?
确定从插入语句中省略_DB_PREFIX_
确实有效! :) 好极了!!
但我真的需要知道什么时候出错。
这些是我的错误相关配置php.ini
display_errors => STDOUT => STDOUT
display_startup_errors => On => On
error_append_string => no value => no value
error_log => no value => no value
error_prepend_string => no value => no value
error_reporting => 32767 => 32767
html_errors => Off => Off
ignore_repeated_errors => Off => Off
log_errors => On => On
log_errors_max_len => 1024 => 1024
track_errors => On => On
xdebug.force_display_errors => On => On
xdebug.force_error_reporting => 32767 => 32767
xdebug.show_error_trace => On => On
当我提供一张不存在的表时,我发现没有任何错误
任何想法?
答案 0 :(得分:1)
要在cli(或其他脚本)中使用Prestashop功能,我们只需要包含/ require_once config/config.inc.php
。
此外,与Db::getInstance()->execute()
不同,Db::getInstance()->insert()
不应指定_DB_PREFIX_。插入函数将处理这个问题。
要获取错误输出,我们需要检查config/defines.inc.php
中是否启用了开发模式,并且php设置允许显示错误(使用php -i | grep error
或phpinfo();
如果使用网络可访问的脚本)