2010-07-23 49 views
1

我正在編寫ClearCache行爲。在行爲中獲取控制器名稱

它的目的是刪除模型的每個af​​terSave和afterDelete事件中的一些自定義緩存文件。

爲了刪除正確的文件,我需要知道控制器的名稱和行動,呼籲ModelWithClearCacheBehavior->保存()的名稱或ModelWithClearCacheBehavior->刪除()

我的問題是: 如何獲得這些行爲中的名字?

回答

1

有沒有一個優雅的解決方案(至少我不知道它)。

您可以用例如配置::寫的類做到這一點:)

在你的AppController中的beforeFilter(你可以添加以下代碼:您的行爲以後

Configure::write('current_controller', $this->name); 
Configure::write('current_action', $this->action); 

你可以訪問他們與

Configure::read('current_controller'); 
Configure::read('current_action'); 

您可以訪問它,因爲您在任何模型迭代之前設置它們。

當然,它不是優雅的,但它的工作。

0

不是我真的做任何事情,但是這本書的一個簡短的閱讀似乎表明,該模型是(或者應該是)可用的行爲裏 -

當創建行爲的方法,你會自動獲得作爲第一個參數傳遞了調用模型的引用。所有其他提供的參數都向右移一位

那麼你應該能夠通過$Model

+0

對不起,我的大腦在別的地方。你不會爲模型感到困擾。 – Leo 2010-07-23 16:08:20

+0

我想我可能最終會做像Nik這樣的建議,但我會更傾向於寫一個會話變量。 – Leo 2010-07-23 16:10:00

0

訪問模型,這是一個有點晚,但對於未來的參考,CakePHP的2.0可以在(使用CakeRequest)行爲來完成這樣

beforeFind(&$model, $query){ 
    global $Dispatcher; 
    $request = new CakeRequest(); 
    $request = $Dispatcher->parseParams($request, $additionalParams = array()); 
    pr($request->params->controller); 
    return $query; 
} 
相關問題