You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

后台管理界面编辑商品保存时应使用的事件及示例咨询

后台商品保存时的可用事件及示例

前端层面:表单提交事件

如果需要在后台页面的前端环节做调整(比如提交前校验、附加额外数据),可以监听表单的submit事件,或者绑定自定义按钮的点击事件来触发保存逻辑。

示例(原生JavaScript):

<!-- 商品编辑表单 -->
<form id="productEditForm" action="/admin/products/save" method="POST">
  <input type="text" name="name" value="测试商品">
  <input type="number" name="price" value="89.9">
  <button type="submit">保存商品</button>
</form>

<script>
// 监听表单提交事件
document.getElementById('productEditForm').addEventListener('submit', function(e) {
  // 先阻止默认提交行为,执行自定义调整
  e.preventDefault();
  
  // 示例1:附加当前编辑人ID(隐藏字段)
  const editorField = document.createElement('input');
  editorField.type = 'hidden';
  editorField.name = 'last_editor_id';
  editorField.value = '123'; // 实际替换为当前登录用户ID
  this.appendChild(editorField);
  
  // 示例2:校验价格合法性
  const priceInput = this.querySelector('[name="price"]');
  if (parseFloat(priceInput.value) <= 0) {
    alert('商品价格不能为0或负数');
    return;
  }
  
  // 完成调整后提交表单
  this.submit();
});
</script>

后端层面:模型/业务钩子事件

如果要在后端处理保存逻辑时做调整(比如自动填充字段、记录操作日志),不同后端框架都有对应的钩子事件,比如:

  • Laravel:saving/saved模型事件
  • Django:pre_save/post_save信号

以Laravel框架为例的示例:

  1. 在商品模型中定义事件监听:
// app/Models/Product.php
namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Product extends Model
{
    protected static function booted()
    {
        // 保存前触发:可修改待保存的数据
        static::saving(function ($product) {
            // 自动填充最后更新人ID
            $product->last_updated_by = auth()->id();
            // 格式化价格为两位小数
            $product->price = number_format($product->price, 2, '.', '');
        });

        // 保存后触发:可执行后续操作(如日志记录)
        static::saved(function ($product) {
            // 记录商品编辑日志
            \App\Models\OperationLog::create([
                'user_id' => auth()->id(),
                'action' => '编辑商品',
                'target_id' => $product->id,
                'content' => "修改商品名称为{$product->name}"
            ]);
        });
    }
}
  1. 后台控制器的保存逻辑无需额外修改,正常调用模型保存方法即可:
// app/Http/Controllers/Admin/ProductController.php
namespace App\Http\Controllers\Admin;

use App\Models\Product;
use Illuminate\Http\Request;

class ProductController extends Controller
{
    public function update(Request $request, Product $product)
    {
        // 验证表单数据
        $validated = $request->validate([
            'name' => 'required|string|max:255',
            'price' => 'required|numeric'
        ]);
        
        // 保存商品,自动触发模型定义的saving/saved事件
        $product->update($validated);
        
        return redirect()->back()->with('success', '商品保存成功');
    }
}

内容的提问来源于stack exchange,提问作者SMS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 04:12:47