后台管理界面编辑商品保存时应使用的事件及示例咨询
后台商品保存时的可用事件及示例
前端层面:表单提交事件
如果需要在后台页面的前端环节做调整(比如提交前校验、附加额外数据),可以监听表单的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框架为例的示例:
- 在商品模型中定义事件监听:
// 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}" ]); }); } }
- 后台控制器的保存逻辑无需额外修改,正常调用模型保存方法即可:
// 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
相关产品推荐
相关产品推荐

