2012-05-05 10 views
0

コントローラのインデックス関数内のデータを初期化しようとしていますので、コントローラの後続の関数で初期化されたデータを使用できます。しかし、問題は、データが他の機能からアクセスしようとしているときに表示されていないことです。このすべては、オブジェクト指向のパターンの一種に従うだけです。インデックス関数内でCodeignieterデータが初期化されていません

ここに私のコードです。

class Dashboard extends CI_Controller 
{ 
    private $account_data; /*Declaration*/ 
    private $profile_data; 

    function __construct() { 
     // code... 
    } 

    function index() /*Here I am initializing data*/ 
    { 
     $this->load->model('db_model'); 
     $this->account_data = $this->db_model->get_row(); 
     $this->profile_data = $this->db_model->get_row(); 
     $this->load->view('user/dashboard'); 
    } 

    function function account_details() 
    { 
     print_r($this->account_data); // This displays nothing 
    } 

    /*other function...*/ 

} 

アイデアは、データを一度取得して他の機能に使用し、データが再度更新された場合、それを初期化するための関数を呼び出します。

しかし、うまくいきません。私を助けてください。また、私が正しいアプローチに従っているかどうかを提案する。 お時間をいただきありがとうございます。

+0

あなたはそれがうまくいかないという意味ですか?アカウントの詳細よりも前にそのインデックスを呼び出す必要がありますか? –

+0

コンストラクタが別のメソッド内からメソッドを呼び出すのでなければ、コントローラ内のメソッドは異なる実行で動作します。ここで、 'index'と' account_details'は別々の 'account_details'実行でアクセスされます。' index'については知りません – Broncha

答えて

5

インデックスメソッドは初期化されていません。デフォルトのページ/サブメソッド URLに "* account_details *"を呼び出すと、index.php/dashboard/account_detailsというインデックスが呼び出されません。あなたはこのコントローラのすべてのメソッドに必要がない場合は__construct上のモデルや他の計算は(ない):

は注意

class Dashboard extends CI_Controller 
{ 
    private $account_data; /*Declaration*/ 
    private $profile_data; 

    function __construct() { /*Here I am initializing data*/ 
     parent::CI_Controller(); // Thank you Sven 
     $this->load->model('db_model'); 
     $this->account_data = $this->db_model->get_row(); 
     $this->profile_data = $this->db_model->get_row(); 
    } 

    function index() 
    { 

     $this->load->view('user/dashboard'); 
    } 

    function function account_details() 
    { 
     print_r($this->account_data); // This displays nothing 
    } 

    /*other function...*/ 

} 
、コンストラクタにコードを配置してみてください。

"model_initializer()"のようなプライベートメソッドを作成し、このコードをこのスコープに置き、必要に応じて他のメソッドに呼び出すことができます。$this->model_initialize();

ありがとうごめんなさいセサマゴマ、

+2

モデル論理計算をコントローラコンストラクタの中に残すことは、必ずしも良い選択ではありません。 –

+0

ありがとうセサマゴマカスタムイニシャライザのメモを追加しました。 –

+0

親(CI_Controller)コンストラクタを最初に呼び出す必要がありますか、これは新しいバージョンのCIで廃止されましたか? –

関連する問題