2011-11-09 1 views
3

コードイグナイターでモデルのコンストラクターに変数を渡すことは不可能です。 MVCやコードイグナイターで何かが欠けているかもしれませんが、何が理解できません。なぜコードイグナイターでModelのコンストラクタに変数を渡すことができないのですか?

私の場合、Modelの代わりにlibrairiesを使うべきですか?実は私のコードは次のように見ている、と私はそれは少し奇妙だと思う

を(librairiesは実際にパラメータを受け入れる):

コントローラー:

class User extends CI_Controller { 
    public function user($user_id) { 
     $this->load->model('user'); 
     $this->user->setId($user_id); 

     $data['username'] = $this->user->getName();  
     // Isn't it a bit strange ? I can load the class User even if the User doesn't mean anything ? 
    } 
} 

モデル:

class User extends CI_Model { 
    private $id; 
    private $name; 

    public function setId($id) { 
     $this->id = $id; 
     // Retrieve data from DB... 
     $this->name = $retrieved_data['name']; 
    } 

    public function getName() { 
     return $this->name; 
    } 
} 
+2

モデルクラスの名前をuser_modelに変更するとどうなりますか? – Shomz

+0

それはまったく同じことです。実際問題は、コードイグナイターのモデルがコンストラクターの変数を受け入れないことです(http://codeigniter.com/user_guide/general/models.html)。 CodeIgniter Logic(またはMVC LogicでModelがコンストラクタ内の変数を受け入れるべきではないのでしょうか?) – lepix

+1

変数を受け入れるべきです... hm、何のエラーが発生するのですか?あなたが得る? これを書き直します。 – Shomz

答えて

1

はこれを試してみてください:

コントローラ:

class User extends CI_Controller { 

    public function user($user_id) { 
     $this->load->model('user_model'); 

     $data['username'] = $this->user_model->getName($user_id);  
    } 
} 

モデル:

class User_model extends CI_Model { 

    public function getName($user_id) { 
     //Retrieve data from DB using the $user_id variable... 
     return $retrieved_data['name']; 
    } 
} 

はそれを行うために、より論理的かつ迅速な方法のように思えます。残りのコードに準拠しているかどうかは不明ですが、エラーを追跡するのに役立ちます。

+0

ありがとうございました!私は今より良く理解しています。しかし、私はあなたが書いたものに関連した別の質問があります:http://stackoverflow.com/questions/8069903/real-objects-and-mvc – lepix

+0

喜んで私は助けることができました!その質問については、CIを1つのhuuugeオブジェクトと考えてください。 – Shomz