2011-06-02 54 views
0

無法找到明確答案,看似簡單的問題。在cakephp模型中使用會話變量

我使用find()從數據庫中提取日期。我有會話變量(由認證提供)中的用戶時區偏移量(-5,-6等)。我想使用afterFind()回調在顯示之前根據用戶時區更新時間,然後在重新保存時使用beforeSave()回調來調整回GMT。

如何訪問模型中afterFind函數內部的Auth變量?

謝謝!

回答

5

由於Auth-Component是控制器的擴展,因此沒有「自然」的方法將它引入到模型中。

你可以做一個App::import('Controller', 'Users')或無論你在做什麼。

你可以看到你如何使用這個功能在這裏:Using App::import

但我真的認爲,因爲這只是一個顯示的一些信息的物質的助手將是你的問題更好的解決方案(以服務「 V「在MVC中)。

你可以寫一個幫手,它會把你的日期(我想你在你的數據庫中使用DATEDATETIME)並將其轉換爲正確的時區。

function convert_timezone($time) 
    $timezone = $this->Session->read('Auth.timezone'); 
    date_default_timezone_set($timezone); //set the correct timezone which we read from the Session 
    return gmdate("M d Y H:i:s", strtotime($time)); //using strtotime to convert the time from the database to a timestamp 
} 

請看看如何編寫自己的助手,功能gmdate和CakePHP的會話輔助這些通知鏈接。

The methods of the session helper

Writing your own helpers

PHPs gmdate function

+0

沒錯,這些東西好像用一個afterFind和beforeSave是不是做的最好方法試驗之後。我試圖操縱太多的數據,並且必須遍佈App :: import(),並對MVC造成嚴重破壞。我最終創建了一個組件,在將它發送到視圖之前,可以操縱控制器中的數據。謝謝! – tnichols 2011-06-10 20:54:30