Laravel Livewire控制器无法读取{id},删除功能失效求助
问题解决步骤
1. 修复视图中的删除按钮
原代码里的<a>标签会触发默认跳转(导致URL末尾加问号),且错误使用了Vue风格的:wire:click指令,替换为按钮并修正Livewire语法:
<!-- 替换前 --> <a href="#" :wire:click="deleteCategory({{$category->id}})" data-bs-toggle="modal" data-bs-target="#deleteModal" class="btn btn-danger">Delete</a> <!-- 替换后 --> <button type="button" wire:click="deleteCategory({{$category->id}})" data-bs-toggle="modal" data-bs-target="#deleteModal" class="btn btn-danger">Delete</button>
2. 修正控制器的deleteCategory方法
原方法试图使用路由模型绑定,但视图传递的是分类ID而非模型实例,调整方法接收ID并存储:
// 替换前 public function deleteCategory(Category $category_id) { $this->category_id = $category_id; } // 替换后 public function deleteCategory($id) { $this->category_id = $id; }
3. 优化destroyCategory方法(可选)
删除后刷新分页数据,避免页面残留旧数据:
public function destroyCategory() { $category = Category::findOrFail($this->category_id); $path = 'uploads/category/' . $category->image; if (File::exists($path)) { File::delete($path); } $category->delete(); session()->flash('message', 'Category Deleted'); // 重置分页页码,刷新数据列表 $this->resetPage(); }
关键说明
- Livewire的
wire:click指令不需要加冒号,冒号是Vue的属性绑定语法,Livewire直接使用wire:click即可。 - 使用
<button>代替<a>标签,可避免默认跳转行为,解决URL添加问号的问题。 - 用
findOrFail替代find,能在找不到对应分类时抛出异常,便于调试定位问题。
内容的提问来源于stack exchange,提问作者JoyBoy
相关产品推荐
相关产品推荐

