Php 带有$category的通知->;getProducts();试图获取非对象的属性“;

Php 带有$category的通知->;getProducts();试图获取非对象的属性“;,php,prestashop,prestashop-1.6,Php,Prestashop,Prestashop 1.6,我正在尝试获取Prestashop中一个类别的产品总数,我得到了正确的数量,但有此通知: “正在尝试获取Category.php中非对象的属性” 这是我的密码: <?php define('PRESTASHOP_S_EXTERNAL_SCRIPT', true); include(dirname(__FILE__).'\..\prestashop_1.6.1.0\prestashop\config\config.inc.php'); //returns 1 echo Configurat

我正在尝试获取Prestashop中一个类别的产品总数,我得到了正确的数量,但有此通知:

“正在尝试获取Category.php中非对象的属性”

这是我的密码:

<?php
define('PRESTASHOP_S_EXTERNAL_SCRIPT', true);
include(dirname(__FILE__).'\..\prestashop_1.6.1.0\prestashop\config\config.inc.php');

//returns 1
echo Configuration::get('PS_LANG_DEFAULT');

$id_category = 123;

$category = new Category($id_category, (int)Configuration::get('PS_LANG_DEFAULT'),(int)Configuration::get('PS_SHOP_DEFAULT'));

//works
echo $category->getName();

//returns 1   
echo is_object($category);

//returns the correct number but with a PHP notice ("Trying to get property of non-object in Category.php on line 671")
echo $category->getProducts(1,1,1000,null,null,1,1);


引发此通知是因为您的上下文中未设置任何控制器

如果查看第671行的Category.php:

public function getProducts($id_lang, $p, $n, $order_by = null, $order_way = null, $get_total = false, $active = true, $random = false, $random_number_products = 1, $check_access = true, Context $context = null)
{
    // [...]
    $front = in_array($context->controller->controller_type, array('front', 'modulefront'));
    // [...]
}
问题来自此代码
$context->controller->controller\u type
。您的上下文中没有定义控制器,因为您没有从Prestashop中运行脚本

您可以尝试手动将控制器添加到上下文对象:

$context = Context::getContext();
$context->controller = new FrontController();
echo $category->getProducts(1,1,1000,null,null,1,1);

我添加了:
$context=context::getContext()$上下文->控制器=新控制器()最后一行给了我一个致命错误,无法实例化抽象类控制器。我的错误是,尝试使用
AdminController
。AdminController会抛出几个错误,但FrontController工作正常。因此,代码是:
$context=context::getContext()$上下文->控制器=新的FrontController()