我編寫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
爲什麼有這麼多看似多餘的電話?這是正常的嗎?