我正在編寫ClearCache行爲。在行爲中獲取控制器名稱
它的目的是刪除模型的每個afterSave和afterDelete事件中的一些自定義緩存文件。
爲了刪除正確的文件,我需要知道控制器的名稱和行動,呼籲ModelWithClearCacheBehavior->保存()的名稱或ModelWithClearCacheBehavior->刪除()
我的問題是: 如何獲得這些行爲中的名字?
我正在編寫ClearCache行爲。在行爲中獲取控制器名稱
它的目的是刪除模型的每個afterSave和afterDelete事件中的一些自定義緩存文件。
爲了刪除正確的文件,我需要知道控制器的名稱和行動,呼籲ModelWithClearCacheBehavior->保存()的名稱或ModelWithClearCacheBehavior->刪除()
我的問題是: 如何獲得這些行爲中的名字?
有沒有一個優雅的解決方案(至少我不知道它)。
您可以用例如配置::寫的類做到這一點:)
在你的AppController中的beforeFilter(你可以添加以下代碼:您的行爲以後
Configure::write('current_controller', $this->name);
Configure::write('current_action', $this->action);
你可以訪問他們與
Configure::read('current_controller');
Configure::read('current_action');
您可以訪問它,因爲您在任何模型迭代之前設置它們。
當然,它不是優雅的,但它的工作。
不是我真的做任何事情,但是這本書的一個簡短的閱讀似乎表明,該模型是(或者應該是)可用的行爲裏 -
當創建行爲的方法,你會自動獲得作爲第一個參數傳遞了調用模型的引用。所有其他提供的參數都向右移一位。
那麼你應該能夠通過$Model
訪問模型,這是一個有點晚,但對於未來的參考,CakePHP的2.0可以在(使用CakeRequest)行爲來完成這樣
beforeFind(&$model, $query){
global $Dispatcher;
$request = new CakeRequest();
$request = $Dispatcher->parseParams($request, $additionalParams = array());
pr($request->params->controller);
return $query;
}
對不起,我的大腦在別的地方。你不會爲模型感到困擾。 – Leo 2010-07-23 16:08:20
我想我可能最終會做像Nik這樣的建議,但我會更傾向於寫一個會話變量。 – Leo 2010-07-23 16:10:00