Laravel 6多值选择输入编辑问题及Undefined变量报错修复
咱们一步步拆解问题,先搞定核心报错,再优化关联逻辑:
1. 定位核心错误:控制器变量名拼写失误
看你PostController的edit方法代码:
public function edit($id) { $post = Post::find($id); $categories = Category::all(); $tags = Tag::all(); return view('posts.edit')->withPost($post)->withCategories($cats)->withTags($tags); }
你明明定义了分类变量$categories,但传递给视图时却用了未定义的$cats!PHP会因为这个错误直接中断方法执行,导致$tags变量根本没法传递到视图,最终触发「Undefined variable: tags」的报错。
修复控制器代码
把withCategories($cats)改成withCategories($categories),或者更推荐用compact()方法批量传递变量,写法更简洁也不容易出错:
public function edit($id) { $post = Post::find($id); $categories = Category::all(); $tags = Tag::all(); // 用compact一次性传递所有需要的变量 return view('posts.edit', compact('post', 'categories', 'tags')); }
2. 优化视图的标签选中逻辑(额外修复)
另外,你的视图里判断标签是否选中的逻辑也不对:Post和Tag是belongsToMany多对多关联,$post->tag_id这个字段根本不存在(这是一对多关联的写法)。正确的判断方式是检查当前标签是否在文章的标签集合里:
<div class="form-group"> <label for="exampleFormControlSelect1">Tag</label> <select class="form-control select2-multi" name="tags[]" id="tags" multiple="multiple"> @foreach($tags as $tag) <option value="{{$tag->id}}" @if($post->tags->contains($tag->id)) selected @endif >{{$tag->name}}</option> @endforeach </select> </div>
这样修改后,既解决了变量未定义的错误,也能正确显示文章已关联的标签。
内容的提问来源于stack exchange,提问作者Narakaya
相关产品推荐
相关产品推荐

