Typecho插件编写中禁用方法注意事项

Typecho中编写插件不可避免的需要解除到两个函数,一个是activate(),另一个是deactivate()

其中activate()是激活插件时进行的操作,deactivate()是禁用插件时进行的操作。

一般来说,在activate()中对插件进行初始化,也就是添加路由啊什么的,然后在deactivate()中对之前添加的路由什么的进行删除。

康康在LoveKKVIP插件中肯定是添加了一些路由啊什么的,最近更新了1.0.5版本,却出现了奇怪的问题。。。

什么问题呢?就是在线支付后,无论是通知跳转还是异步通知都不行了,访问是能访问,但是却直接空白!

于是康康就开始了排错,首先开启debug,却发现什么错误都没有,一片空白,于是康康在return方法起始部分添加了exit('1'),再次访问,依然一片空白!

当时康康就懵了,按理来说,只要访问是正确的,那么应该会出现一个数字1才对啊!

康康再三的确认了下,路由设置是正确的,也证明函数是能访问的,在Action构造函数中添加了同样的语句,显示1,证明Action是访问到了,可按照目前的情况来说,就是访问不到正确的return方法!

思考半天,测试半天,可都没有结果,访问都是一片空白,正郁闷中,突然想到,1.0.5版本对代码进行了重构,所以需要禁用插件,重新覆盖再激活,那会不会是路由出现了问题呢?

赶紧去数据库里查看,发现在路由表中的确存在有上个版本的路由信息,这下明白了!

上个版本在deactivate()方法中,把其中几个路由的删除给搞漏了,结果就是禁用并删除上一版本插件后,原路由没有被删除。

然后上传新版本并激活,添加了新路由,这样就导致路由表中存在两个相同的路由了,而访问的时候就会直接访问到第一个路由,这样当然访问不到指定了函数了!

既然知道了原因,那肯定要把这个BUG给修复了,赶紧写了一个单文件的插件,插件就只有一个功能,那就是删除原来的路由,上传激活并禁用后,原始路由被删除,插件可以正常访问!

所以,这里也提醒下各位,如果在编写插件时涉及到了路由,请一定一定要记得在禁用时把路由给删除,避免出现问题!

最后修改:2019 年 04 月 27 日 12 : 10 PM
如果觉得我的文章对你有用,请随意赞赏

发表评论