2016-03-28 8 views
2

私が現在開発しているPHP MVCでは、ベースコントローラはユーザーがログインしているかどうかを確認し、ログインしている場合はそのプロパティを更新します(コードを参照)。PHP MVCでは、コントローラデータをモデルクラスに渡す正しい方法は何ですか?

これらのプロパティはさまざまなモデルクラスのメソッドで使用されているので、それらをベースコントローラから(ベース)モデルに渡したいと思います。 これを行う正しい方法は何ですか?

class Controller { 

    protected $user_logged_in = false; 
    protected $logged_in_user_id = null; 

    function __construct() { 
     if(isset($_SESSION['user_id'])) { 
       $this->user_logged_in = true; 
       $this->logged_in_user_id = $_SESSION['user_id']; 
     } 
    } 
} 
+0

セッションは「モデル」です。コントローラとモデルでこのモデルを取得できます。 – Naumov

+0

@Naumov ...モデルメソッドの$ _SESSION変数へのアクセスがわかりません... –

+0

* model *ファイルは実際にデータベースのオブジェクト/レコードを指しています。コントローラからモデルにデータを送信しないでください。 – Eray

答えて

1

モデルのコンストラクタは認証クラスを受け入れます。このリクエストは、autowiring/automatic dependency injectionを介して実行されます。私のインジェクタは、尋ねられるところはどこでも、認証クラスの同じインスタンスを渡すようにプログラムされているので、矛盾はありません(つまり、認証クラスは「共有」されています)。

このようにして、実際にコントローラからモデルレイヤーのクラスにデータを渡すことはありません。その代わりに、モデル層のクラス/サービスは、依存関係を注入することによって必要なクラスに直接アクセスできます。

this videoから技術を学びました。これは最後まで見ておく価値があります。上記は私の実装方法のスニペットですが、チュートリアルやライブラリはautowiringで利用できます。 "php autowiring"または "php automatic dependency injection"を検索してみてください。

コントローラで使用されているサービスにパラメータを追加するだけです。コントローラはモデルレイヤーにアクセスする必要があるため、パラメータの追加機能を呼び出すことは大きな問題ではありません。

関連する問題