2016-03-28 66 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

我這樣做:模型的構造函數接受一個認證類。該請求通過自動裝配/自動依賴注入來實現。我的注入器被編程爲在要求的地方傳遞相同的認證類實例,因此沒有差異(即認證類是「共享」)。

通過這種方式,實際上並沒有將數據從控制器傳遞到模型層中的類。相反,模型層中的類/服務通過注入依賴關係可以直接訪問它所需的類。

我從this video瞭解了技術,值得一看。上面只是我的實現方法的一個片段,但是有自學機制的教程和庫可以做不同的方式。嘗試搜索「php autowiring」或「php自動依賴注入」。

另一種做你想做的事情的方法是給你的控制器中使用的服務添加一個參數。你的控制器應該可以訪問模型層,所以調用add參數函數應該不是什麼大問題。

相關問題