Laravel Backpack中向addButtonFromView传递变量及解决视图变量未定义问题的方法
嘿,我刚帮你梳理了这个问题的原因和解决办法,在Laravel Backpack 6.x版本里,你用addButtonFromView传递变量的方式和旧版本不太一样,这就是为什么你的$posts在视图里提示未定义的根源。
问题出在哪?
你现在是直接把['posts' => \App\Models\Post::all()]作为addButtonFromView的第五个参数,但Backpack 6.x里,这个参数是按钮的属性数组,这些属性会被绑定到按钮实例上,而不是作为独立变量直接抛给视图模板。所以你在blade里直接写$posts,模板根本找不到这个变量——它其实藏在$button对象里呢。
两种快速解决办法
办法1:修改视图代码,通过$button对象访问变量
不用改控制器代码,直接把blade视图里的$posts换成$button->posts就行,调整后的视图代码如下:
<select class="form-select form-control"> <option value="">-- Select Location --</option> @foreach($button->posts as $post) <option value="{{ $post->id }}">{{ $post->title }}</option> @endforeach </select>
办法2:在视图里先赋值变量,保留原有循环代码
如果你不想改原来的循环逻辑,可以在blade视图最顶部加一段PHP代码,把$button->posts赋值给$posts,这样后面的代码完全不用动:
@php $posts = $button->posts; @endphp <select class="form-select form-control"> <option value="">-- Select Location --</option> @foreach($posts as $post) <option value="{{ $post->id }}">{{ $post->title }}</option> @endforeach </select>
额外小提示
如果你传递的数据集比较大,建议不要直接用Post::all(),可以换成分页或者按需查询的方式,避免页面加载过慢;另外,记得检查Post模型的权限控制,确保当前登录用户能正常获取到这些帖子数据哦。
内容来源于stack exchange
相关产品推荐
相关产品推荐

