2013-09-16 80 views
0

我檢查了typical CakePHP request但找不到解決方案。CakePHP控制器動作設置cookie並傳遞給幫手

起初myThemeCookie不存在。通過設置這個cookie,用戶可以選擇他/她最喜歡的主題,他/她將在未來看到該主題。

我有myControllermyAction。我有一個表格myAction.ctp。用戶可以選擇主題名稱。

首先要求myAction檢查$_POST。它找不到任何價值。行動只顯示錶單。

在第二個請求中,當用戶提交表單時,我再次向myAction發送用戶。行動發現$_POST數據。從$_POST獲取主題css地址。通過使用myComponent,編寫了myThemeCookie

然後我有myLayout.ctp文件。此佈局文件使用myHelper並使用myHelper->getCookieTheme(),它從Cookie獲取主題名稱。但助手給出了空的名字。所以用戶看到舊主題的字體。 (請注意,我通過在幫助程序中使用$_COOKIE變量來檢查cookie數據)

當我刷新myAction頁面併發出第三個請求時,我看到myHelper->getCookieTheme()給出了正確的css文件名。用戶看到新主題的字體。

所以,我在myAction中設置了一個cookie之後,在輔助方法和佈局文件中看不到它。但好像查看/幫助文件是在控制器操作之後計算的。我想念什麼?

回答

0

你根本不需要在視圖中這樣做。也不要直接訪問$ _POST,而是在控制器中使用請求對象$ this-> request。

在您的AppController中有一個像checkThemeFromCookie()方法,並在beforeRender()中調用它,並從cookie中讀取主題,如果該值不是空的,只需執行$ this-> theme = $ themeFromCookie。如果cookie爲空,則只需離開該屬性或設置所需的任何默認主題。

參考

+0

我使用CDN的主題文件。所以我將HTML傳遞給我的佈局/幫手。可以設置$ this->主題。並訪問它內部佈局/助手? – trante

+0

我將在派生控制器內用'''public $ theme =「mytheme」'''創建新變量,並將其設置爲AppController?我無法理解在哪裏設置''this-> theme'''? – trante

+0

這不是一個變量,它是一個屬性。如果你在從AppController派生的控制器中設置,你將覆蓋你在AppController中設置的內容。 OOP基礎知識。既然你想(我猜是這樣)主題適用於任何地方,你將不得不做的cookie檢查和設置AppController中的主題。如果沒有將檢查放在AppController中,並將其設置在需要它的控制器中。 – burzum

相關問題