2008-10-04 29 views
2

我一直在使用會話,MVC設計和麪向對象的PHP。我應該在哪裏保存或檢索會話中的數據?我想從方法中檢索它,所以我不必將數據傳遞給方法。最佳做法是什麼?使用MVC和OO會話的最佳方式PHP

回答

3

我通常把它放在控制器裏面。它是有道理的。控制器決定發生了什麼,爲什麼不讓它決定是否允許人們執行所請求的操作。 通常,您在MVC系統中有多個控制器。例如。 BaseController(抽象 - 普通),NonSessionController擴展BaseController(例如:用於靜態頁面),SessionController擴展BaseController(主要會話在這裏 - 這可能是抽象的)。如果你有例如不同的用戶類型,你可能想要多態這個控制器的,如:AdminController,UserController等

1

我已經嘗試了幾種方式,包括使用靜態包裝類來處理它,但我總是回到只使用超全局數組本身。我仍然使用包裝進行身份驗證檢查和其他重複性任務,但最終,使用庫存設置對我來說更簡單,更簡單。

0

我認爲這取決於回收數據的使用範圍,如果它只在方法內部使用,那麼爲什麼你應該在外面檢索它,而且會話總是在超全局變量中可用,所以最好是本地化它只在需要時。

0

我不會打擾會話包裝。你將無法獲得足夠的優勢來限制。通過超全球允許你使用任何你想要的(希望理智的)數據結構。我的會話數據總是以2級或更多級別的數組數據爲結尾,這對於通過會話包裝器進行管理來說太冗長乏味。

超全球甚至不會限制你讓PHP使用save handler將會話數據存儲在數據庫中,這對於可伸縮性來說是相當不錯的。

3

就我個人而言,我是Zend_Session包裝類的巨大粉絲。我更喜歡使用面向對象風格的數據,並且使用包裝器的命名空間優勢是一個巨大的優勢。

這些看起來更好嗎?

$_SESSION['Zend_Auth']['user'] = "myusername"; 

$authNamespace = new Zend_Session_Namespace('Zend_Auth'); 
$authNamespace->user = "myusername"; 

我喜歡的外觀,使用訪問器給你。

注意:在MVC系統中,無論選擇什麼方法,都應該始終在控制器中獲取/設置會話數據。