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 フォルダーの横に third_party があります。モジュールには、次のように保存されたモジュールはほとんどありません。

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

ロードしようとしているモデルがデータベースに接続しようとしているようですが、データベースドライバが利用できません。アプリケーションでデータベースクエリを使用する場合は、データベースドライバを自動的にロードしてみませんか?

application / config/autoload.phpファイルの「libraries」配列に「database」を挿入するだけです。データベースのクレデンシャルをapplication/config/database.phpに挿入することを忘れないでください。

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

1つのモデルだけでデータベース接続が必要な場合は、データベースライブラリにアクセスする前にデータベース接続をロードしてください。

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

拡張MX_Controllerクラスを使用してみてください(atmを行っているようなCI_Contollerではありません)

上記のコメントに書いたことに基づいて、モジュールでDBの新しいインスタンスを作成しようとしたことがわかりました(chrisesコメントに基づいて)。Special_cart のコンストラクターで行う

したがって、現在の構成を次のように更新します

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

(頭の中で書いているので、方法を確認してください)

これで、確実に db ドライバーがモデルで利用できるはずです。

問題に関してHMVCは、何もないと思います。しばらく使用HMVCしていますが、問題はありませんでした(データベースの操作)

于 2012-09-27T10:14:46.020 に答える
0
Class Models extends MX_Loader{

    function getUser($username){

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

   } 
}

CI_Model を使用してデータベース コアを Codeigniter にロードできないかどうかわからないため、 extends MX_Loader を使用する必要があります。

于 2013-04-21T03:30:34.103 に答える
0

次のようにモジュール名を示すモデルをロードしてみてください

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

于 2012-09-29T09:56:16.307 に答える
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/でも説明されて います。

ノート:

Modules::run() などの HMVC 機能を使用するには、コントローラーで MX_Controller クラスを拡張する必要があります。HMVC を使用せずにモジュラー分離のみを使用するには、コントローラーは CodeIgniter コントローラー クラスを拡張します。コントローラーで PHP5 スタイルのコンストラクターを使用する必要があります。すなわち:

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