2013-11-02 59 views
1

我需要從視圖文件中達到我的cookie。我知道可以在控制器中使用CookieComponent,並通過cookie值來查看set()的文件。CakePHP從視圖文件中達到cookie

我們網站的訪問者有一個選擇頁面。用戶的選擇被保存到cookie中。到目前爲止,我正在使用CookieComponent並檢查值,並使用該值對作品進行處理。但是現在我添加了新的選項選項,所以我需要從我的視圖文件或我的幫助者中獲取它們。如果我從控制器傳遞cookie值進行查看,我必須爲我的每個操作都做到這一點,我不喜歡它。它也會使更復雜的代碼。我看到了this questionthat question。 (也可以用$_COOKIE[<cookie_name>]來讀取它們,但是這個解決方案不能用於加密的cookie。我的cookie沒有加密,但可以在將來)

我的問題是爲什麼CakeHeader中沒有CookieHelper庫?從視圖文件中獲取cookie是否是一種不好的做法?有沒有從視圖中獲取cookie的系統方法?例如編寫一個使用$_COOKIE並使用該助手的自定義助手?

回答

3

從控制器傳遞數據是一種適當的方式。

如果您需要在許多/所有視圖中的數據,使用Controller::beforeFilter()回調,這樣的變量可以由特定的控制器渲染的所有觀點:

class MyController extends AppController 
{ 
    // ... 

    public function beforeFilter() 
    { 
     parent::beforeFiler(); 

     $this->set('cookie', $this->Cookie->read('cookie')); 
    } 

    // ... 
} 

只要確保能夠cookie component configuring完成之前讀取cookie!

+0

雖然我同意這是正確的,但它與他已經找到的答案中提供的相同。如果答案是「你不能」,那麼看起來更像是一個正確的答案,而不是重複OP已經說過他知道的事情。 – Dave

+0

@Dave他發現的或者他認爲他發現的是,他必須在每個控制器操作中設定價值,並且由於顯而易見的原因,他不喜歡這一點。這個答案顯示瞭如何通過使用'beforeFilter()'回調來避免這個問題,所以至少根據他的問題,這是他不知道的。它確實提到[在其中一個鏈接的問題](http://stackoverflow.com/a/15427749/1392379),雖然沒有進一步解釋,這使得在所有視圖中可用的值。隨意添加一個答案,顯示解決問題的其他工作方式。 – ndm

0

我相信你可以通過訪問它SessionHelper

echo $this->Session->read($cookieName); 
+1

如果您明確地將cookie數據寫入會話中,您可以在其中找到任何內容。 – ndm

0

您可以通過JavaScript的幫助讀取Cookie,如果這行不通使用AJAX調用來閱讀文檔加載餅乾和通過返回實現邏輯JSON。