Plugins 为什么在保存操作中多次调用Dokuwiki IO_WIKIPAGE_保存操作插件?

Plugins 为什么在保存操作中多次调用Dokuwiki IO_WIKIPAGE_保存操作插件?,plugins,dokuwiki,Plugins,Dokuwiki,我第一次尝试编写Dokuwiki插件是为了一个操作事件,当一个编辑过的页面被保存到磁盘上时。我编写了一个动作插件类,它扩展了DokuWiki_动作插件;它包含一个register方法,用于向控制器注册两个挂钩: $controller->register_hook('IO_WIKIPAGE_WRITE', 'BEFORE', $this, 'handle_pagewrite_before', array()); $controller->register_hook('IO_WIKIP

我第一次尝试编写Dokuwiki插件是为了一个操作事件,当一个编辑过的页面被保存到磁盘上时。我编写了一个动作插件类,它扩展了DokuWiki_动作插件;它包含一个
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\u pagewrite\u before
handle\u pagewrite\u after
。我将
dbglog
调用放在所有三个存根中,以记录进入和退出

从wiki,我访问一个页面,并编辑它。此时,我在data/cache/debug.log中看到来自
register
方法的三条调试消息。在我第一次输入编辑器时,出现来自
register
的第四条调试消息。当我点击Save保存页面时,会出现第五条
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

为什么有这么多看似多余的电话?这正常吗?

每次插件系统初始化时,都会调用插件的注册方法。因为PHP是基于请求的,所以每次请求都会发生这种情况。加载页面会创建多个请求(页面、JS调度程序、CSS调度程序、索引webbug、ajax调用等)

第二个问题的答案如下:

在对现有页面进行更新时,此事件被调用两次,一次用于将旧版本传输到阁楼(rev将有一个值),一次用于将页面的新版本写入wiki(rev为false)


每次插件系统初始化时,都会调用插件的注册方法。因为PHP是基于请求的,所以每次请求都会发生这种情况。加载页面会创建多个请求(页面、JS调度程序、CSS调度程序、索引webbug、ajax调用等)

第二个问题的答案如下:

在对现有页面进行更新时,此事件被调用两次,一次用于将旧版本传输到阁楼(rev将有一个值),一次用于将页面的新版本写入wiki(rev为false)