0

我最近将我的 2.x CodeIgniter 应用程序升级到 3.0 的 RC。在我的本地机器上一切都运行良好。

但是当我尝试调用时将它扔到远程服务器上时:

$this -> cart -> contents(); 

我收到此错误:

PHP Fatal error:  Call to a member function contents() on a non-object in ... 

如果我

var_dump($this->cart) 

在我的本地机器上,我得到了返回的预期购物车对象,但返回相同

NULL 

在我的远程服务器上运行时。

我还有一个购物车的扩展类,就是这样:

<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class MY_Cart extends CI_Cart
{
    function __construct()
    {
        parent::__construct();
        $this->product_name_rules = '\d\D';
        $this->product_id_rules = '\d\D';
    }
} 

如果我从我的库文件夹中删除 MY_Cart.php 文件(上面的代码),我将在非对象上获得与我在远程服务器上执行的相同的对成员函数 contents() 的调用。为什么删除我自己的购物车扩展会导致购物车对象不复存在?

关于可能导致此行为的任何见解,我尝试在 CodeIgniter 论坛上询问,但没有成功。

我的本地机器和远程服务器都在运行 PHP 5.4.17。

这是一个堆栈跟踪:

"…bss_web/public/development.bluesea.com/public/application/controllers/
cart.php (32) in Cart::add called at ? (?)"



//increment quantity by 1 if PN is already in cart
$qty = 1;
$items = $this->cart->contents(); //line 32
foreach ($items as $key => $item) {
    if ($item['id'] == $pid) {
        $qty = $item['qty'] + 1;
    }
}

…home/bss_web/public/development.bluesea.com/public/system/core/ CodeIgniter.php (356)

/*
 * ------------------------------------------------------
 *  Call the requested method
 * ------------------------------------------------------
 */

call_user_func_array(array(&$CI, $method), $params); // Line 356

…e_once 在 /home/bss_web/public/development.bluesea.com/public/index.php (312) 调用

/*
 * --------------------------------------------------------------------
 * LOAD THE BOOTSTRAP FILE
 * --------------------------------------------------------------------
 *
 * And away we go...
 */
require_once BASEPATH.'core/CodeIgniter.php'; //line 312

编辑:我发现如果我将失败的控制器重命名为“购物车”(目前是)以外的其他名称,这似乎可行。CodeIgniter 不应该避免这种冲突吗?或者为什么这只会在我的远程机器上发生冲突?

4

1 回答 1

0
function __construct() {
      parent::__construct();
      $this->load->library('cart');
}
于 2013-08-06T17:21:59.343 回答