我想包含类似于WordPress中的动作钩子。我已经阅读了关于编写插件的章节,但是我可以在不改变父应用中的代码的情况下维护它们。CakePHP:为插件创建动作钩子
有没有这方面的支持?
如果没有,是否有一个很好的方法来做到这一点?我有一些想法,但我担心我会重新发明轮子。
我想包含类似于WordPress中的动作钩子。我已经阅读了关于编写插件的章节,但是我可以在不改变父应用中的代码的情况下维护它们。CakePHP:为插件创建动作钩子
有没有这方面的支持?
如果没有,是否有一个很好的方法来做到这一点?我有一些想法,但我担心我会重新发明轮子。
是的。
它的工作原理很多像WordPress的钩子,只有更好。
您可以在不同的地方注册回调,但简单的方法是在插件的bootstrap.php
中执行此操作。
当应用程序加载插件时,它可以告诉CakePHP引导它。这是用这个命令完成的。
CakePlugin::loadAll(array(array('bootstrap'=>true,'routes'=>true)));
我不知道你想什么acomplish,但你可以做这样的事情:
你的控制器(S)beforeFilter()
方法是创建某些码钩子的好去处:
public function beforeFilter() {
parent::beforeFilter(); // don't forget to call parent code
$myHandler->doSomethingInteresting($this->name, $this->action);
}
其中$this->name
会给你被调用的控制器的名称,而$this->action
会给你当前操作的名称。
我希望它有一点帮助。
确实如此,但是如果你想从一个模型中挂钩应用程序保存数据时。没有人知道该钩子何时会被解雇。您的控制器可能不是当前的活动。 – cgTag
你是对的。我想你的答案更有意义...... – ilbesculpi
我在注册侦听器时遇到了一些麻烦。如果我理解正确,我应该在我的插件的bootstrap.php文件中放置类似于本书示例的代码(http://book.cakephp.org/2.0/en/core-libraries/events.html#registering-listeners),然后然后放置您在父应用程序的bootstrap.php文件中提供的代码。那是对的吗? – emersonthis
是的,如果你的插件没有路由,请删除'routes'。 http://book.cakephp.org/2.0/en/plugins.html – cgTag
感谢您的帮助。在示例代码中,我从最后一行('$ this-> Model-> getEventManager() - > attach()'得到'错误:在不在对象上下文中时使用$ this。这应该如何在插件的bootstrap.php文件中工作? – emersonthis