不少朋友升级到 Typecho 1.3.0 之后,
可能会遇到一个不太显眼、但挺影响使用的问题:
编辑带有附件的文章时,页面会出现 500 错误,
而且因为附件面板是独立切换的,排查起来也不太直观。
其实不是插件坏了,也不是程序出了故障,
只是官方在底层做了一处小调整,对附件相关的插件来说,就需要顺手做一下兼容。
一、改动点在哪?其实就一处
问题出在文件:var/Widget/Upload.php 第 50 行的 attachmentHandle 方法。
旧版本(1.2.x 及以前)参数是数组,写法是这样:
public static function attachmentHandle(array $content): string1.3.0 新版本,参数类型换成了 Typecho\Config 对象:
public static function attachmentHandle(Config $attachment): string就这一行的变化,导致原来按数组写的插件,直接对不上类型,程序一跑就报错。
二、官方为什么这么改?
并不是随便调整,而是框架本身的优化:
使用 Config 统一管理配置,结构更规范
避免数组键名混乱,方便后续扩展
整体代码更严谨,减少误调用
对系统本身是好事,只是对已有的附件上传类插件,会带来兼容性问题。
三、插件兼容方案:加一段判断就行
不用重写插件,也不用降级版本,只需要在插件的 attachmentHandle 方法里,做一次参数兼容处理。
原来的写法(会报错)
public static function attachmentHandle(array $content): string兼容 1.3.0 的写法,把参数类型去掉或改为 mixed,然后在方法开头统一处理:
public static function attachmentHandle($content): string
{
// 兼容新旧版本参数
if ($content instanceof \Typecho\Config) {
$content = $content->toArray();
} else {
$content = $content['attachment'] ?? [];
}
// 下面原有逻辑保持不变
}改完这一小段,老插件就能正常在 1.3.0 里使用,文章编辑页的 500 错误也会消失。
四、简单总结一下
Typecho 1.3.0 在附件处理上,把参数从数组换成了 Config 对象:
系统更规范、更稳定
旧附件插件会因类型不匹配报错
只需在插件内做一次类型判断和转换,即可完美兼容
升级本身是好事,只是需要我们顺手给插件做个小适配。
如果你用了自定义上传、图片处理类插件,升级前可以先检查这一处,能省去不少麻烦。
暂无评论