Prestashop 1.6/1.7:在 "web" public 文件夹中的 PHP 脚本中要求 "autoload.php" 导致错误 500(没有命名空间的脚本)
Prestashop 1.6/1.7: require "autoload.php" in a PHP script in the "web" public folder results in an error 500 (script without namespace)
在 mydockercontainer:<mysite>/web/
中,这是我的 NGINX 服务器 Docker 容器的 public 目录,我正在编写一个 PHP 脚本,它包含一个简单的 class,Prestashop 1.6/1.7 之外(站点是 Prestashop 1.7,但出于项目原因我想在 1.6 中编写代码)。
这个“简单class”是:mydockercontainer:<mysite>/web/gateway/gateway.php
。如您所见,它不是模块,也不是控制器的覆盖,也不是与 Prestashop 相关的其他东西。这只是一个普通的 PHP 脚本。
但是,这个脚本 gateway.php
需要使用一些 Prestashop 的对象。例如 Order
.
当我尝试实例化 Order
时,出现此错误:
Fatal error: Uncaught Error: Class 'Order' not found in /var/www/html/gateway/requestHandler.php:47 Stack trace: #0 /var/www/html/gateway/requestHandler.php(17): RequestHandler->handleOrderUpdate() #1 /var/www/html/gateway/wakeup.php(5): RequestHandler->handleRequest() #2 {main} thrown in /var/www/html/gateway/gateway.php on line 47
所以在这个脚本的开头,我添加了以下行:require_once '../autoload.php';
。它引发了一个新错误:ERROR 500 但我无法弄清楚日志。
请注意,我的 PHP 脚本没有任何命名空间,因为它在 Prestashop 之外。
我该怎么做才能在简单的 PHP 中使用对象 Prestashop 1.6/1.7(偏好:1.6)class 例如 Object
不是 Prestashop 的脚本 controller/module/etc.?
代码片段
以下代码并不完整,但足以解决问题。
文件:mydockercontainer:<mysite>/web/gateway/gateway.php
(web
是我的 Prestashop 1.7 站点的 public 目录):
<?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 将不起作用。
在 mydockercontainer:<mysite>/web/
中,这是我的 NGINX 服务器 Docker 容器的 public 目录,我正在编写一个 PHP 脚本,它包含一个简单的 class,Prestashop 1.6/1.7 之外(站点是 Prestashop 1.7,但出于项目原因我想在 1.6 中编写代码)。
这个“简单class”是:mydockercontainer:<mysite>/web/gateway/gateway.php
。如您所见,它不是模块,也不是控制器的覆盖,也不是与 Prestashop 相关的其他东西。这只是一个普通的 PHP 脚本。
但是,这个脚本 gateway.php
需要使用一些 Prestashop 的对象。例如 Order
.
当我尝试实例化 Order
时,出现此错误:
Fatal error: Uncaught Error: Class 'Order' not found in /var/www/html/gateway/requestHandler.php:47 Stack trace: #0 /var/www/html/gateway/requestHandler.php(17): RequestHandler->handleOrderUpdate() #1 /var/www/html/gateway/wakeup.php(5): RequestHandler->handleRequest() #2 {main} thrown in /var/www/html/gateway/gateway.php on line 47
所以在这个脚本的开头,我添加了以下行:require_once '../autoload.php';
。它引发了一个新错误:ERROR 500 但我无法弄清楚日志。
请注意,我的 PHP 脚本没有任何命名空间,因为它在 Prestashop 之外。
我该怎么做才能在简单的 PHP 中使用对象 Prestashop 1.6/1.7(偏好:1.6)class 例如 Object
不是 Prestashop 的脚本 controller/module/etc.?
代码片段
以下代码并不完整,但足以解决问题。
文件:mydockercontainer:<mysite>/web/gateway/gateway.php
(web
是我的 Prestashop 1.7 站点的 public 目录):
<?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 将不起作用。