From 0e3a442ddd21e691f5729949ea37d64c260ea3e6 Mon Sep 17 00:00:00 2001 From: augushong Date: Fri, 1 May 2026 20:57:20 +0800 Subject: [PATCH] =?UTF-8?q?fix(API):=20=E4=BF=AE=E5=A4=8D=E6=96=87?= =?UTF-8?q?=E7=AB=A0=E5=8F=91=E5=B8=83=E6=97=B6=20publish=5Ftime=20?= =?UTF-8?q?=E8=87=AA=E5=8A=A8=E5=A1=AB=E5=85=85=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 统一处理 publish_time 参数,空字符串按未传处理。在创建和更新文章时,当文章状态为发布且未提供 publish_time 时,自动填充当前时间。同时修复更新文章时,从草稿首次发布且原 publish_time 为 0 时自动填充时间的逻辑。 --- app/api/controller/Articles.php | 33 +++++++++++++++++++--- view/admin/post/edit_content_markdown.html | 1 + view/index/api_doc/index.html | 3 +- 3 files changed, 32 insertions(+), 5 deletions(-) diff --git a/app/api/controller/Articles.php b/app/api/controller/Articles.php index 56711f5..6de3d7e 100644 --- a/app/api/controller/Articles.php +++ b/app/api/controller/Articles.php @@ -116,11 +116,21 @@ class Articles extends BaseController $post_data['content_type'] = 'html'; } - // 校验 publish_time 格式(必须是 Y-m-d H:i:s) - if (isset($post_data['publish_time']) && !empty($post_data['publish_time'])) { + // 统一处理 publish_time:空字符串按未传处理;发布状态未传时自动补当前时间 + if (array_key_exists('publish_time', $post_data)) { + if (is_string($post_data['publish_time'])) { + $post_data['publish_time'] = trim($post_data['publish_time']); + } + if ($post_data['publish_time'] === '') { + unset($post_data['publish_time']); + } + } + if (isset($post_data['publish_time'])) { if (!preg_match('/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$/', $post_data['publish_time'])) { return json_message('publish_time 格式错误,应为 Y-m-d H:i:s,如 2024-01-15 14:30:00'); } + } elseif ((string) $post_data['status'] === '1') { + $post_data['publish_time'] = date('Y-m-d H:i:s'); } // content_type 白名单校验 @@ -208,11 +218,26 @@ class Articles extends BaseController // 禁止客户端设置的时间字段 unset($post_data['create_time'], $post_data['update_time']); - // 校验 publish_time 格式(必须是 Y-m-d H:i:s) - if (isset($post_data['publish_time']) && !empty($post_data['publish_time'])) { + // publish_time 处理:未传则不更新;仅草稿首次发布且原值为 0 时自动补当前时间 + $has_publish_time = array_key_exists('publish_time', $post_data); + if ($has_publish_time && is_string($post_data['publish_time'])) { + $post_data['publish_time'] = trim($post_data['publish_time']); + } + if ($has_publish_time && $post_data['publish_time'] === '') { + unset($post_data['publish_time']); + $has_publish_time = false; + } + if ($has_publish_time) { if (!preg_match('/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$/', $post_data['publish_time'])) { return json_message('publish_time 格式错误,应为 Y-m-d H:i:s,如 2024-01-15 14:30:00'); } + } elseif ( + array_key_exists('status', $post_data) + && (string) $model_post->getData('status') === '0' + && (string) $post_data['status'] === '1' + && (int) $model_post->getData('publish_time') === 0 + ) { + $post_data['publish_time'] = date('Y-m-d H:i:s'); } // categorys diff update diff --git a/view/admin/post/edit_content_markdown.html b/view/admin/post/edit_content_markdown.html index 7b1b1b4..1f042f8 100644 --- a/view/admin/post/edit_content_markdown.html +++ b/view/admin/post/edit_content_markdown.html @@ -122,6 +122,7 @@ var vditor = new Vditor('editor-text-area', { height: 'auto', cache: { enable: false }, + cdn: '/static/lib/vditor', mode: 'wysiwyg', toolbar: [ 'headings', 'bold', 'italic', 'strike', '|', diff --git a/view/index/api_doc/index.html b/view/index/api_doc/index.html index a0ceb03..eeff078 100644 --- a/view/index/api_doc/index.html +++ b/view/index/api_doc/index.html @@ -273,7 +273,7 @@ X-API-Key: {api_key} content_typestring否内容类型: "html"(默认) 或 "markdown"
当为 "markdown" 时,系统会自动将 content 转换为 HTML 存储到 content_html 字段 categorysarray否分类 ID 数组,如 [1, 2] tagsarray否标签 ID 数组,如 [1, 2] - publish_timestring否发布时间,格式为 Y-m-d H:i:s,如 2024-01-15 14:30:00 + publish_timestring否发布时间,格式为 Y-m-d H:i:s,如 2024-01-15 14:30:00;当 status=1 且未传或传空字符串时,系统自动使用当前时间

注:create_timeupdate_time 由系统自动生成,客户端无需设置也无法修改。

@@ -287,6 +287,7 @@ X-API-Key: {api_key} "title": "新文章标题", "content": "文章内容", "status": 1, + "publish_time": "2024-01-15 14:30:00", "categorys": [1, 2], "tags": [3] }'