2013-06-04 1 views
2

Я хотел бы включить действия, аналогичные тем, которые были найдены в Wordpress. Я читал главу о написании плагинов, но я мог бы поддерживать их без изменения кода в родительском приложении.CakePHP: создайте игровые крючки для плагинов

Есть ли запеченная поддержка?

Если нет, есть ли хороший способ сделать это? У меня есть некоторые идеи, но я волнуюсь, что собираюсь изобретать колесо.

ответ

4

Да, есть.

CakePHP Event System

Он много работает, как крючки WordPress, но только лучше.

Вы можете зарегистрировать обратные вызовы в разных местах, но простой способ - сделать это в bootstrap.php плагина.

Когда приложение загружает плагин, он может сказать CakePHP, чтобы загрузить его. Это делается с помощью этой команды.

CakePlugin::loadAll(array(array('bootstrap'=>true,'routes'=>true))); 
+0

У меня проблемы с регистрацией слушателей. Если я правильно вас понимаю, я должен поместить код, похожий на пример книги (http://book.cakephp.org/2.0/en/core-libraries/events.html#registering-listeners) в файле bootstrap.php моего плагина и затем поместите код, указанный в файле bootstrap.php родительского приложения. Это верно? – emersonthis

+0

Да, удалите «маршруты», если у вас нет маршрутов для вашего плагина. http://book.cakephp.org/2.0/ru/plugins.html – cgTag

+0

Спасибо за помощь. Я получаю «Ошибка: использование $ this, если не в контексте объекта» из последней строки ('$ this-> Model-> getEventManager() -> attach()') в примере кода. Как это должно работать в файле bootstrap.php плагина? – emersonthis

2

Я не уверен, что вы пытаетесь acomplish, но вы могли бы сделать что-то вроде этого:

Вашего контроллера (ы) beforeFilter() метода является хорошим местом для создания certains крюков:

public function beforeFilter() { 
    parent::beforeFilter(); // don't forget to call parent code 
    $myHandler->doSomethingInteresting($this->name, $this->action); 
} 

, где $this->name предоставит вам имя вызываемого контроллера, а $this->action предоставит вам имя текущего действия.

Я надеюсь, что это поможет.

+0

Правда, но если вы хотите подключиться к модели из приложение, когда оно сохраняет данные. Неизвестно, когда этот крюк будет запущен. Возможно, ваш контроллер не является текущим. – cgTag

+0

Ты абсолютно прав. Думаю, ваш ответ имеет больше смысла ... – ilbesculpi