0

我希望在我跳下窗户之前有人能帮我解决这个问题。我花了几个小时在这个上,不知道我做错了什么。

基本上,我已经在 CodeIgniter 2.1.2 中安装了 HMVC,一切正常,但由于某种原因,我无法像在标准控制器中那样加载模型。在旧的 codeigniter 1.7.1 中,我可以简单地通过调用 $this->load->model('my_model') 来使用它,但现在我不能了吗?!

每次我尝试加载模型时都会收到此错误:

A PHP Error was encountered
Severity: Notice
Message: Undefined property: Special_cart::$db
Filename: core/Model.php
Line Number: 51

我已经按照说明一步一步地安装了它。我在模块文件夹旁边找到了第三方。在模块中,我几乎没有像这样存储的模块:

modules
--boxes
----controller
----models
----views

我在我的代码中调用模块是这样的:

<?=modules::run('boxes/special_cart/index');?>

我的模块控制器代码如下所示:

class Special_cart extends CI_Controller
{
    public function __construct()
    {
        parent::__construct();

    }   





    public function index()
    {
        if ($this->session->userdata('cart'))
        {
            # get product id's and each quantity

            $cart_product_list = array_count_values($this->session->userdata('cart'));

            # get list of product_id
            $product_list = array_keys($cart_product_list); 

            # get product details
            $this->load->model('productmodel');
            $this->load->model('stockmodel');

            $cart_products = $this->productmodel->cart_get_products_details($product_list);
            $final_cart_array = array();

            foreach($cart_products as $cart_product){
                $product_stock = $this->stockmodel->view_product_stock($cart_product["id"]);
                if(empty($product_stock) || $product_stock["UNITS"]<=0)
                    $cart_product["UNITS"] = 0;
                else{
                    if($cart_product_list[$cart_product["id_web"]]>$product_stock["UNITS"])
                        $cart_product["UNITS"] = $product_stock["UNITS"];
                    else{
                        $cart_product["UNITS"] = $cart_product_list[$cart_product["id_web"]];
                    }
                }
                $final_cart_array[] = $cart_product;

            }

            $refresh_cart_array = array();


            foreach($final_cart_array as $cart_product){

                for($i=1;$i<=$cart_product["UNITS"];$i++){
                    $refresh_cart_array[] = $cart_product["id_web"];
                }

            }


            $this->load->view("special_cart",array(
                                                'refresh_cart_array'        => $refresh_cart_array,
                                                'final_cart_array' => $final_cart_array
                                                ));





                } else {
                $this->load->view("special_cart",array(
                                                    'refresh_cart_array'        => NULL,
                                                    'final_cart_array' => NULL
                                                    ));

                    }
            }   

}

我已经尝试了在互联网上找到的所有可能的解决方案 - 它们都不起作用......我希望你能理解我的问题,但如果你需要进一步的解释,请问我。任何人都可以帮忙吗?

4

5 回答 5

0

Try loading the model stating the module name as follows

    $this->load->model('module_name/productmodel');
    

于 2012-09-29T09:56:16.307 回答
0
Class Models extends MX_Loader{

    function getUser($username){

        $sql="SELECT * FROM user WHERE username = ? ";
        return $this->db->query($sql,array($username))->row();

   } 
}

你必须使用扩展 MX_Loader 因为我不知道是否使用 CI_Model 数据库核心不能在 Codeigniter 中加载,,,

于 2013-04-21T03:30:34.103 回答
0

看起来您尝试加载的模型想要连接到数据库,但数据库驱动程序不可用。如果您在应用程序中使用数据库查询,为什么不自动加载数据库驱动程序?

只需在 application/config/autoload.php 文件的“libraries”数组中插入“database”。不要忘记将您的数据库凭据插入到 application/config/database.php 中。

$autoload['libraries'] = array('database');

如果您只需要一个模型中的数据库连接,请在尝试访问数据库库之前加载它。

$this->load->database();
于 2012-09-27T01:15:02.427 回答
0

尝试使用扩展 MX_Controller 类(不是 CI_Contoller 就像你正在做 atm)

根据您在上面的评论中写的内容,我认为您尝试在模块中创建新的 DB 实例(基于 chrises 评论)。在 Special_cart 的构造函数上做

所以更新当前的构造就像

public function __construct()
{
    parent::__construct();
    $this->load->database('default');
}

(我是从头顶写的,所以检查方法)

现在可以确定 db 驱动程序应该在您的模型中可用。

关于问题,HMVC我认为没有。我现在使用HMVC了一段时间,我发现它没有问题(使用数据库)

于 2012-09-27T10:14:46.020 回答
0

我有同样的问题和错误。我错过了将控制器扩展到 MX_Controller。所以解决方案是将 CI_Controller 更改为 MX_Controller ,如下所示:

class Special_cart extends MX_Controller
{
    public function __construct()
    {
        parent::__construct();
        $this->load->model('productmodel');
        $this->load->model('stockmodel'); 
    }

     public function index()
    {
        if ($this->session->userdata('cart'))
        {
            # get product id's and each quantity

            $cart_product_list = array_count_values($this->session->userdata('cart'));

            # get list of product_id
            $product_list = array_keys($cart_product_list); 

            # get product details

            $cart_products = $this->productmodel->cart_get_products_details($product_list);
            $final_cart_array = array();

            foreach($cart_products as $cart_product){
                $product_stock = $this->stockmodel->view_product_stock($cart_product["id"]);
                if(empty($product_stock) || $product_stock["UNITS"]<=0)
                    $cart_product["UNITS"] = 0;
                else{
                    if($cart_product_list[$cart_product["id_web"]]>$product_stock["UNITS"])
                        $cart_product["UNITS"] = $product_stock["UNITS"];
                    else{
                        $cart_product["UNITS"] = $cart_product_list[$cart_product["id_web"]];
                    }
                }
                $final_cart_array[] = $cart_product;

            }

            $refresh_cart_array = array();


            foreach($final_cart_array as $cart_product){

                for($i=1;$i<=$cart_product["UNITS"];$i++){
                    $refresh_cart_array[] = $cart_product["id_web"];
                }

            }


            $this->load->view("special_cart",array(
                                                'refresh_cart_array'        => $refresh_cart_array,
                                                'final_cart_array' => $final_cart_array
                                                ));





                } else {
                $this->load->view("special_cart",array(
                                                    'refresh_cart_array'        => NULL,
                                                    'final_cart_array' => NULL
                                                    ));

                    }
            } 
}

这也在文档 https://bitbucket.org/wiredesignz/codeigniter-modular-extensions-hmvc/中进行了解释 ,这里是引用:

笔记:

要使用 HMVC 功能,例如 Modules::run(),控制器必须扩展 MX_Controller 类。要仅使用模块化分离,不使用 HMVC,控制器将扩展 CodeIgniter 控制器类。您必须在控制器中使用 PHP5 样式的构造函数。IE:

<?php
class Xyz extends MX_Controller 
{
    function __construct()
    {
        parent::__construct();
    }
}
于 2016-01-28T07:28:50.267 回答