Laravel编辑分类时如何显示该分类的原有值?
解决Laravel编辑分类表单无法显示原有值的问题
看起来你遇到的问题大概率是路由模型绑定的参数匹配问题,再加上视图里的一些小细节疏漏,我帮你一步步排查和解决:
1. 核心问题:路由模型绑定不匹配
你当前的路由定义是:
Route::resource('Category','CategoryController');
Laravel的路由模型绑定是靠路由占位符名称和控制器方法参数名称匹配来工作的——这里路由生成的占位符是{Category}(首字母大写),但你控制器方法里的参数是$category(全小写),名称不匹配导致Laravel无法正确查询对应ID的分类实例,传递到视图的$category其实是一个空的Category对象,自然拿不到原有值。
解决办法:修正路由资源名称为小写
改成Laravel惯例的小写形式,确保占位符和参数名称一致:
Route::resource('category', CategoryController::class);
同时,视图里的路由名称也要对应改成小写(路由资源生成的路由名称是category.update,不是Category.update):
<form class="form-horizontal" action="{{ route('category.update',['category'=>$category]) }}" method="POST">
2. 视图里的细节优化
修正textarea的拼写和格式
你写的row="3"是拼写错误,应该是rows="3";另外textarea的内容不要加多余空格,不然会显示不必要的空白内容:
<textarea name="category_description" rows="3">{{ $category->category_description }}</textarea>
加入old()方法提升用户体验
建议在表单字段里使用old()方法,这样如果表单验证失败,会保留用户输入的内容,而不是直接回到原始值:
<input type="text" name="category_name" value="{{ old('category_name', $category->category_name) }}"> <textarea name="category_description" rows="3">{{ old('category_description', $category->category_description) }}</textarea>
调整@csrf的位置
虽然不影响功能,但把@csrf放在表单开头更符合开发惯例:
<form class="form-horizontal" action="{{ route('category.update',['category'=>$category]) }}" method="POST"> @csrf @method('PATCH') <!-- 其他表单字段 --> </form>
3. 额外排查步骤
如果做完上面的修改还是不行,可以试试:
- 在控制器的
edit方法里加个dd($category),看看是否拿到了正确的分类实例:public function edit(Category $category){ dd($category); // 检查输出是否是你要编辑的分类数据 return view('admin.editcategory',compact('category')); } - 清除路由缓存:执行
php artisan route:clear,避免旧的路由缓存影响。
修改后的完整代码示例
路由
Route::resource('category', CategoryController::class);
控制器
public function edit(Category $category){ return view('admin.editcategory',compact('category')); }
视图
<form class="form-horizontal" action="{{ route('category.update',['category'=>$category]) }}" method="POST"> @csrf @method('PATCH') <input type="text" name="category_name" value="{{ old('category_name', $category->category_name) }}"> {{ $errors->first('category_name') }} <textarea name="category_description" rows="3">{{ old('category_description', $category->category_description) }}</textarea> {{ $errors->first('category_description') }} <button type="submit" class="btn btn-primary">Edit category</button> </form>
内容的提问来源于stack exchange,提问作者Asaduzzaman Rabby
相关产品推荐
相关产品推荐

