开发者

Getting controller's name inside behavior

Im writing ClearCache behavior.

It's purpose is to delete some of custom cache files on every afterSave and afterDelete event of the model.

In order to delete right files i need to know name of controller and the name of action that called ModelWithClearCacheBehavior->save() or ModelWithClearCacheBehavior->delete()

My question is: How to g开发者_JS百科et those names inside behavior?


There is no an elegant solution about this (at least I don't know it).

You can do it with a Configure::write class for example:

in your AppController's beforeFilter() you can add the following code:

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

later on in your behavior you can access them with

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

You can access it because you set them before any model iterations.

For sure it's not elegant but it's working.


Not something I've really done anything with, but a brief reading of the book seems to indicate that the model is (or should be) available inside the behaviour -

When creating behavior methods you automatically get passed a reference of the calling model as the first parameter. All other supplied parameters are shifted one place to the right.

You should then be able to access the model via $Model


this is a bit late but for future reference, in cakephp 2.0 can be done this way in a behavior (using CakeRequest)

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜