فهرست منبع

修复新闻资讯时间显示问题,创建没有写入时间

mylink 5 ماه پیش
والد
کامیت
3c171c58ec
4فایلهای تغییر یافته به همراه72 افزوده شده و 9 حذف شده
  1. 58 0
      README.md
  2. 8 2
      ffi/main.go
  3. 4 6
      src/Controller/Admin/NewsController.php
  4. 2 1
      src/Service/NewsFfiService.php

+ 58 - 0
README.md

@@ -58,6 +58,64 @@ backend/extension/news/
 - Docker (用于执行 `Makefile` 中的构建命令)
 - PHP 7.4+ 并已启用 FFI 扩展
 
+## 宝塔面板环境启用 PHP FFI 教程
+
+以下步骤以宝塔面板安装的 PHP 8.3 为例,其他版本仅需替换路径中的版本号。
+
+### 1. 进入 FFI 源码目录
+
+```bash
+cd /www/server/php/83/src/ext/ffi
+```
+
+若提示目录不存在,请先在宝塔面板的 PHP 设置中执行一次“重新安装源码”。
+
+### 2. 生成编译配置
+
+```bash
+phpize
+```
+
+执行成功后会生成 `configure` 等构建文件。
+
+### 3. 配置并编译扩展
+
+```bash
+./configure --with-php-config=/www/server/php/83/bin/php-config
+make && make install
+```
+
+完成后系统会在 `/www/server/php/83/lib/php/extensions/` 下生成 `ffi.so`。
+
+### 4. 配置 php.ini
+
+在宝塔面板中打开 PHP 8.3 的 `php.ini`,或直接修改 `/www/server/php/83/etc/php.ini`,追加:
+
+```ini
+extension=ffi
+ffi.enable=true
+```
+
+如果使用 PHP-FPM,请同步在 `php.d` 或额外的配置文件中开启上述参数,确保 CLI 与 FPM 环境都能加载 FFI。
+
+### 5. 重启 PHP 服务
+
+在宝塔面板中重启对应 PHP 版本的服务,或执行:
+
+```bash
+bt restart php 83
+```
+
+### 6. 验证扩展是否生效
+
+```bash
+/www/server/php/83/bin/php -m | grep FFI
+```
+
+若输出包含 `FFI`,说明扩展已启用。也可使用 `php -i | grep -i ffi` 查看详细配置。
+
+完成以上步骤后,即可在 `news` 插件中通过 PHP FFI 加载 Go 动态库。
+
 ## 构建 Go 共享库
 
 所有 Go 源代码的编译都通过 `Makefile` 完成。

+ 8 - 2
ffi/main.go

@@ -5,8 +5,7 @@ import (
 	"encoding/json"
 	"fmt"
 	"newsffi/model"
-
-	// "time" // This is not used directly in main.go
+	"time"
 
 	"gorm.io/driver/mysql"
 	"gorm.io/gorm"
@@ -319,6 +318,10 @@ func CreateNews(dataJson *C.char) *C.char {
 	}
 
 	news.ID = 0
+	// 自动设置创建时间和更新时间
+	now := time.Now()
+	news.CreateTime = now
+	news.UpdateTime = now
 
 	if err := db.Create(&news).Error; err != nil {
 		return C.CString(fmt.Sprintf(`{"error": "create failed: %s"}`, err.Error()))
@@ -354,6 +357,9 @@ func UpdateNews(id C.int, dataJson *C.char) *C.char {
 
 	delete(updateData, "id")
 	delete(updateData, "ID")
+	
+	// 自动设置更新时间
+	updateData["update_time"] = time.Now()
 
 	if err := db.Model(&news).Updates(updateData).Error; err != nil {
 		return C.CString(fmt.Sprintf(`{"error": "update failed: %s"}`, err.Error()))

+ 4 - 6
src/Controller/Admin/NewsController.php

@@ -132,10 +132,8 @@ class NewsController
             unset($data['cover']);
         }
         
-        // 添加创建时间和更新时间(临时注释测试)
-    // $currentTime = date('Y-m-d H:i:s');
-    // $data['create_time'] = $currentTime;
-    // $data['update_time'] = $currentTime;
+        // 不传递时间字段,让 Go 服务自动设置
+        // Go 服务会在创建时自动设置 create_time 和 update_time
         
         $res = $this->service->create($data);
         return json(['code' => 200, 'msg' => '创建成功', 'data' => $res]);
@@ -166,8 +164,8 @@ class NewsController
             unset($data['cover']);
         }
         
-        // 添加更新时间(临时注释测试)
-        // $data['update_time'] = date('Y-m-d H:i:s');
+        // 不传递时间字段,让 Go 服务自动设置
+        // Go 服务会在更新时自动设置 update_time
         
         $res = $this->service->update($id, $data);
         if (!$res) {

+ 2 - 1
src/Service/NewsFfiService.php

@@ -151,7 +151,8 @@ class NewsFfiService
     public function createNews(array $data): array
     {
         $payload = empty($data) ? new \stdClass() : $data;
-        return $this->call('CreateNews', json_encode($payload));
+        $result = $this->call('CreateNews', json_encode($payload));
+        return is_array($result) ? $result : [];
     }
 
     public function updateNews(int $id, array $data): array