我编写Dokuwiki插件的第一次尝试是针对动作事件,当编辑后的页面被保存到磁盘时。我写了一个动作插件类,它扩展了DokuWiki_Action_Plugin
;它包含一个register
方法与控制器注册了两个挂钩:为什么在保存操作中多次调用Dokuwiki IO_WIKIPAGE_SAVE动作插件?
$controller->register_hook('IO_WIKIPAGE_WRITE', 'BEFORE', $this, 'handle_pagewrite_before', array());
$controller->register_hook('IO_WIKIPAGE_WRITE', 'AFTER', $this, 'handle_pagewrite_after', array());
(“之前”方法被调用页面的内容被写入之前,和方法“后”被称为它的写法后)
我已经写了两种方法handle_pagewrite_before
和handle_pagewrite_after
的存根。我在所有三个存根中放入dbglog
调用来记录进入和退出。
从维基,我访问一个页面,并编辑它。在这一点上我看到三个来自register
方法的调试消息出现在data/cache/debug.log中。在我编辑的第一次按键时,出现register
的第四条调试消息。当我点击保存保存该页面时,会出现第五个register
消息,然后是来自挂钩的两组消息,其中我预期只有一个消息,随后是更多register
消息。总之,
21:32:34 10.0.1.24: Enter gloss:action:register
21:32:34 10.0.1.24: Enter gloss:action:register
21:32:34 10.0.1.24: Enter gloss:action:register
21:33:56 10.0.1.24: Enter gloss:action:register
21:35:46 10.0.1.24: Enter gloss:action:register
21:35:46 10.0.1.24: Enter gloss:action:handle_pagewrite_before
21:35:46 10.0.1.24: Exit gloss:action:handle_pagewrite_before
21:35:46 10.0.1.24: Enter gloss:action:handle_pagewrite_after
21:35:46 10.0.1.24: Exit gloss:action:handle_pagewrite_after
21:35:46 10.0.1.24: Enter gloss:action:handle_pagewrite_before
21:35:46 10.0.1.24: Exit gloss:action:handle_pagewrite_before
21:35:46 10.0.1.24: Enter gloss:action:handle_pagewrite_after
21:35:46 10.0.1.24: Exit gloss:action:handle_pagewrite_after
21:35:46 10.0.1.24: Enter gloss:action:register
21:35:46 10.0.1.24: Enter gloss:action:register
21:35:47 10.0.1.24: Enter gloss:action:register
为什么有这么多看似多余的电话?这是正常的吗?