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

using prestashop DB API in a php-cli project for testing?

我在 nginx 服务器上的 php 7.1.7 上安装了 prestashop 1.7.2.0。

我正在为 prestashop 编写一个模块,如果我可以将 prestashop API 用于 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 class grep prestashop 项目时,我只能看到一个抽象 class,这意味着其他东西扩展并初始化了它。

知道如何解决这个问题吗?

更新

我好像指向了一个刚刚解压并没有安装的pestashop目录。当我将它指向一个正确配置了 prestashop 的目录时,只需要 config.inc.php 就足够了……但是

当我对我创建的 table 执行插入操作时,没有任何反应,也没有 return 错误。有什么想法吗?

我运行命令:

    Db::getInstance()->insert(_DB_PREFIX_.'tuxinmod_cartype',['id_tuxmod_cartype'=>0],true);

数据库中没有任何变化。为什么? :)

我创建了 table 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

当我提供一个不存在的 table

时,我看不到任何错误

有什么想法吗?

要在 cli(或其他脚本)中使用 Prestashop 功能,我们只需要 include/require_once config/config.inc.php

此外,与 Db::getInstance()->execute() 不同的是,对于 Db::getInstance()->insert(),您不应指定 _DB_PREFIX_。插入函数会处理这个问题。

并且为了获得错误输出,我们需要检查 config/defines.inc.php 中是否启用了开发模式,以及 php 设置是否允许错误显示(使用 php -i | grep errorphpinfo(); 如果使用可通过网络访问的脚本)