如何在Prestashop中解决此错误


How to Solve This Error In Prestashop

代码:

public function init()
{
   global $cookie, $smarty, $cart, $iso, $defaultCountry, $protocol_link, $protocol_content, $link, $css_files, $js_files;
   if(!session_id()){
      if(!isset($_SESSION)){
         session_start();
      }
   }
   $cookie->id_cart=$_SESSION['pj_punchout_id'];
   if (self::$initialized)
      return;
   self::$initialized = true;
   $css_files = array();
   $js_files = array();

错误:

严格标准:根据第82行C:''examplep''htdocs''pjwebstoredev''classes''FrontController.php中的空值创建默认对象

我假设您使用的是Prestashop v1.4。我可以看到的主要问题是,您已经编辑了其中一个核心文件,因此大多数人都不看好将来是否能够支持您的代码。如果您想干净地修改核心类的行为,那么您应该创建一个名为/override/classes/FrontController.php的覆盖,其中包含以下内容:

class FrontController extends FrontControllerCore
{
    function init()
    {
        // Your additional custom init code goes here
        parent::init();
        // And/or additional custom init code goes here
    }
}

不过,当我们进入下一阶段时,这并不是根本问题。你看到的错误是因为你正在字符串中使用全局变量$cookie,但在变量被设置为任何有意义的变量之前的某个时间点(全局cookie变量实际上是在你修改的函数后面初始化的)。由于您需要操作cookie属性,因此可以尝试创建一个临时cookie对象,使用它来操作用户的cookie,然后调用核心代码,例如

class FrontController extends FrontControllerCore
{
    function init()
    {
        if ( !session_id() ) {
            if( !isset($_SESSION) ) {
              session_start();
            }
        }
        $cookieLifetime = (time() + (((int)Configuration::get('PS_COOKIE_LIFETIME_FO') > 0 ? (int)Configuration::get('PS_COOKIE_LIFETIME_FO') : 1)* 3600));
        $cookie = new Cookie('ps', '', $cookieLifetime);
        $cookie->id_cart=$_SESSION['pj_punchout_id'];
        parent::init();
    }
}