2016-09-28 7 views
0

私はCodeigniterプロジェクトに取り組んでおり、モデルからコントローラにアクセスしています。 $ this =>コントローラが$ CI = & get_instance()を使用するのと同じか異なるかどうか疑問に思っています。私はいいえと思っていますが、私はこの方法よりも関数からデータを返す標準に慣れています。私はこれをやってCodeIgniterの例を見ていないので、私は、これは、コントローラにアクセスするための提案の方法であるとは思いませんが、ハックのより:これは本当にCIされていないCodeigniter - コントローラのデータをモデルからアクセス

class my_model extends CI_Model 
{ 
    public function __construct() 
    { 
     $this->errors = array(); 
     parent::__construct(); 
     $this->controller = get_instance(); 
    } 

    public function somefunc() 
    { 
     // Accessing controller 
     $this->controller->session->set_userdata('foo', 'bar'); 
     $this->controller->data = "fubar"; 
    } 
} 
+4

これはアンチパターンだと思います。コントローラは、ロジックを制御するコントローラでなければなりません。モデル関数からのリターンを得ることでこれを行うことができます。 – Phiter

+0

はい@phiterと同意します。しかし、それでもあなたは$ this-> controller =&get_instance();を試してみたいと思っています。詳細な回答はこちら:http://stackoverflow.com/a/4740548/1578380 – Chintan7027

答えて

2

、これは修正されます。使用されているのはsimple_HMVCかもしれません。

通常のCI使用では、モデルによってデータが返されます。

あなたのアプリのどこかに$コントローラがコントローラオブジェクトとして設定されていて、CIスーパーオブジェクトのエイリアスとして設定されています。このように、階層的なモジュール式MVCが実装されているので、モジュール内のコントローラメソッドを他のモジュールから呼び出すことができます。

これは良い練習であるかどうかは、いくつかの議論の問題です。それはハックのビットですが、simple_hmvcでは必ずしも悪いIMHOではありませんが、私はこれをしません。デバッグ、単体テスト、または責任の明快さだけがひどくぼやけていて、後で問題を引き起こすような状況を作り出しているようです。

関連する問題