2010-07-23 4 views
1

Im пишет поведение ClearCache.Получение имени контроллера внутри поведения

Целью является удаление некоторых пользовательских файлов кеша при каждом событии afterSave и afterDelete модели.

Чтобы удалить нужные файлы мне нужно знать имя контроллера и имя действия, называемого ModelWithClearCacheBehavior-> Save() или ModelWithClearCacheBehavior-> Удалить()

Мой вопрос: Как получить те имена внутри поведения?

ответ

1

Нет такого элегантного решения об этом (по крайней мере, я этого не знаю).

Вы можете сделать это с помощью Configure :: класс записи, например:

в beforeFilter вашей AppController в() вы можете добавить следующий код:

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

позже в своем поведении вы можете получить доступ к их с

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

Вы можете получить к нему доступ, потому что вы устанавливаете их перед любыми итерациями модели.

Наверняка это не изящно, но оно работает.

0

Не то, что я действительно сделал что-нибудь с, но краткое чтение книги, кажется, указывает, что модель (или должна быть) доступны в поведении -

При создании методов поведения, вы автоматически получаете передал ссылку вызывающей модели в качестве первого параметра. Все остальные поставляемые параметры сдвигаются на одно место вправо.

тогда Вы должны быть в состоянии получить доступ к модели с помощью $Model

+0

Извините, мой мозг был где-то в другом месте. Вы не беспокоитесь о модели. – Leo

+0

Думаю, что я, вероятно, в конечном итоге сделаю что-то вроде Nik, но я был бы более склонен писать переменную сеанса. – Leo

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; 
}