如何在Prestashop中解决此错误

时间:2012-03-17 06:49:54

标签: php 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:\ xampp \ htdocs \ pjwebstoredev \ classes \ FrontController.php中从空值创建默认对象

1 个答案:

答案 0 :(得分:2)

我假设你正在使用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();
    }
}