在php cli项目中使用prestashop DB API进行测试?

在php cli项目中使用prestashop DB API进行测试?,php,prestashop,prestashop-1.7,Php,Prestashop,Prestashop 1.7,我已经在nginx服务器上的PHP7.1.7上安装了prestashop 1.7.2.0 我正在为prestashop编写一个模块,如果我可以使用用于PHP-CLI的prestashop API来测试我的模块的安装和操作,那么速度会更快 特别是现在,我需要让Db::getIntance工作 到目前为止,我创建了以下脚本: <?php const PRESTASHOP_DIR = __DIR__.DIRECTORY_SEPARATOR.'..'.DIRECTORY_SEPARATOR.'..

我已经在nginx服务器上的PHP7.1.7上安装了prestashop 1.7.2.0

我正在为prestashop编写一个模块,如果我可以使用用于PHP-CLI的prestashop API来测试我的模块的安装和操作,那么速度会更快

特别是现在,我需要让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();
当我尝试为Db类grep prestashop项目时,我只能看到一个抽象类,这意味着其他东西可以扩展并初始化它

你知道怎么解决这个问题吗

使现代化 似乎我指向了一个刚刚解压但未安装的pestashop目录。当我将它指向一个正确配置了prestashop的目录时,只需要config.inc.php就足够了。。但是

当我插入我创建的表时,不会发生任何事情,也不会返回错误。有什么想法吗

我运行命令:

    Db::getInstance()->insert(_DB_PREFIX_.'tuxinmod_cartype',['id_tuxmod_cartype'=>0],true);
数据库中没有任何更改。为什么

我创建了表ps_tuxinmod_cartype。。但我还是应该出错,我没有。我错过了什么

使现代化 好的,从insert语句中省略_DB_前缀uu确实有效!:耶!! 但我真的需要知道什么时候有错误

这些是我的错误相关配置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
当我提供一个不存在的表时,我没有看到任何错误


有什么想法吗?

要在cli或其他脚本中使用Prestashop函数,我们只需要在config/config.inc.php中包含/require\u

另外,与Db::getInstance->execute不同,使用Db::getInstance->insert时,不应指定_Db_前缀。insert函数将处理这个问题


为了获得错误输出,我们需要检查config/defines.inc.php中是否启用了dev模式,并且php设置允许使用php-i | grep error或phpinfo显示错误;如果使用web可访问脚本

是否包含了配置文件include'path to config/config.inc.php'来加载prestashop?@sadlyblue yeapsorry,没有注意到。您自己正在加载dbpdo类。通常我们不需要这样做。只有config.inc.php,与供应商的自动加载相同。当您试图在配置之前加载时,dbpdo扩展了一个它还不知道的db类。另一方面,prestashop中是否有prestashop文件夹?@sadlyblue-prestashop目录包含prestashop文件。如果我只包含config.inc.php文件,程序将在include上终止,因为它可能缺少一些变量定义,并因此停止执行我的应用程序。@sadlyblue-感谢迄今为止的支持。更新了主要帖子我又错过了一件事。。。当然,要将项目指向正确安装和配置的prestashop目录,以便能够获取db配置!:
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