2012-05-08 98 views
4

我使用的是auth組件,它工作正常。 但在內容之前,我有一些菜單,這是不同的,如果用戶登錄我的默認佈局所以我想確定用戶是否登錄或通常我使用$ this-> Auth-> user('id' )但$ this-> Auth在佈局中不起作用(它只能在查看哪個控制器使用Auth組件的情況下工作)。蛋糕php和使用身份驗證佈局

怎麼辦?

回答

6

您可以從會話中讀取身份驗證數據。例如:

$user = $session->read('Auth'); 

不要忘記在您的AppController中添加會話助手。

var $helpers = array('Session'); 
+2

這只是一個比我提供的解決方案更少的DRY解決方案。你不得不在任何需要它的地方調用$ this-> Session-> read(),並在不需要時加載幫助器。 – burzum

+0

我認爲他爲什麼要問佈局而不是查看的主要原因是他想把它發佈到任何地方。 –

+0

佈局與視圖相同...無論設置爲視圖(類),佈局中也可以使用。 – burzum

12

在beforeRender()只需要調用

$this->set('userData', $this->Auth->user()); 

,並設置數據視圖,做你檢查的視圖。

爲了獲得佈局中的數據,您應該在AppController中調用beforeRender()方法。

傳遞它通過會議不是一個好主意恕我直言。這可能不是通常的情況,但至少我更喜歡把事情做好:如果你使用會話,那麼你的代碼會在沒有使用會話的系統中失敗(無狀態身份驗證)。總的來說,我一點也不喜歡訪問會話。 Session對我來說更像是一個數據源。

+0

但我需要它在佈局不在視野內!佈局沒有任何控制器,我可以把它放在之前... – user606521

+5

你顯然不知道CakePHP或MVC是如何工作的?這會將數據設置爲視圖,並通過它使其在所有佈局中可用。佈局實際上只是視圖的一部分。佈局呈現與視圖相同的方式,視圖僅在佈局內呈現。另外,我建議你在告訴別人它沒有工作之前嘗試一下代碼。 – burzum