Prestashop 1.6/1.7:在“web”公共文件夹中的 PHP 脚本中需要“autoload.php”导致错误 500没有命名空间的脚本

问题描述

mydockercontainer:<mysite>/web/ 中,这是我的 Nginx 服务器 Docker 容器的公共目录,我正在编写一个 PHP 脚本,它包含一个简单的类,来自 Prestashop 1.6/1.7(站点是 Prestashop 1.7,但我想要出于项目原因,在 1.6 中编写代码)。

这个“简单的类”是:mydockercontainer:<mysite>/web/gateway/gateway.PHP。正如你所看到的,它不是一个模块,也不是一个控制器的覆盖,或者其他与 Prestashop 相关的东西。它只是一个普通的 PHP 脚本。

然而,这个脚本 gateway.PHP 需要使用一些 Prestashop 的对象。例如Order

当我尝试实例化 Order 时,出现此错误

致命错误:未捕获错误:在 /var/www/html/gateway/requestHandler.PHP:47 中找不到类“Order” 堆栈跟踪:#0 /var/www/html/gateway/requestHandler.PHP(17) : RequestHandler->handleOrderUpdate() #1 /var/www/html/gateway/wakeup.PHP(5): RequestHandler->handleRequest() #2 {main} 扔在 /var/www/html/gateway/gateway.PHP第 47 行

因此在此脚本的开头,我添加了以下行:require_once '../autoload.PHP';。它引发了一个错误:ERROR 500 但我无法弄清楚日志。

请注意,我的 PHP 脚本没有任何命名空间,因为它在 Prestashop 之外。

我该怎么做才能在不是 Prestashop 控制器/模块/等的简单 PHP 脚本中使用对象 Prestashop 1.6/1.7(偏好:1.6)类,例如 Object。 ?

代码片段

以下代码并不完整,但足以解决问题。

文件mydockercontainer:<mysite>/web/gateway/gateway.PHPweb 是我的 Prestashop 1.7 站点的公共目录):

<?PHP
require_once '../autoload.PHP';

class Gateway {
    private $request;

    private function handleOrderUpdate() {
        $ps_order = new Order($this->request['id']);    
    }   

}

解决方法

为了启动 Prestashop 核心并在外部脚本中使用 PS 对象,您需要包含

../config/config.inc.php

包含 autoload.php 将不起作用。