我正在写 ClearCache 行为。
其目的是在模型的每个 afterSave 和 afterDelete 事件中删除一些自定义缓存文件。
为了删除正确的文件,我需要知道控制器的名称和调用 ModelWithClearCacheBehavior->save() 或 ModelWithClearCacheBehavior->delete() 的操作名称
我的问题是:如何在行为中获取这些名称?
我正在写 ClearCache 行为。
其目的是在模型的每个 afterSave 和 afterDelete 事件中删除一些自定义缓存文件。
为了删除正确的文件,我需要知道控制器的名称和调用 ModelWithClearCacheBehavior->save() 或 ModelWithClearCacheBehavior->delete() 的操作名称
我的问题是:如何在行为中获取这些名称?
对此没有一个优雅的解决方案(至少我不知道)。
您可以使用 Configure::write 类来做到这一点,例如:
在 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;
}