1

我正在写 ClearCache 行为。

其目的是在模型的每个 afterSave 和 afterDelete 事件中删除一些自定义缓存文件。

为了删除正确的文件,我需要知道控制器的名称和调用 ModelWithClearCacheBehavior->save() 或 ModelWithClearCacheBehavior->delete() 的操作名称

我的问题是:如何在行为中获取这些名称?

4

3 回答 3

2

对此没有一个优雅的解决方案(至少我不知道)。

您可以使用 Configure::write 类来做到这一点,例如:

在 AppController 的 beforeFilter() 中,您可以添加以下代码:

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

稍后在您的行为中,您可以使用

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

您可以访问它,因为您在任何模型迭代之前设置了它们。

当然,它并不优雅,但它正在工作。

于 2010-07-23T12:51:43.353 回答
0

不是我真正做过任何事情,但是对这本书的简短阅读似乎表明该模型在行为中是(或应该是)可用的 -

创建行为方法时,您会自动将调用模型的引用作为第一个参数传递。所有其他提供的参数都向右移动一位

然后,您应该能够通过以下方式访问模型$Model

于 2010-07-23T13:48:07.570 回答
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;
 }
于 2011-09-08T09:51:30.487 回答