【发布时间】:2017-07-14 01:44:48
【问题描述】:
我第一次尝试编写 Dokuwiki 插件是针对 Action 事件,当编辑的页面被保存到磁盘时。我编写了一个扩展DokuWiki_Action_Plugin 的动作插件类;它包含一个register 向控制器注册两个钩子的方法:
$controller->register_hook('IO_WIKIPAGE_WRITE', 'BEFORE', $this, 'handle_pagewrite_before', array());
$controller->register_hook('IO_WIKIPAGE_WRITE', 'AFTER', $this, 'handle_pagewrite_after', array());
(“before”方法在页面内容写入之前调用,“after”方法在页面内容写入之后调用。)
我已经为handle_pagewrite_before 和handle_pagewrite_after 两种方法编写了存根。我将dbglog 调用放在所有三个存根中以记录进入和退出。
我从 wiki 访问了一个页面,并对其进行了编辑。此时我看到来自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
为什么会有这么多看似多余的调用?这正常吗?
【问题讨论】: