Laravel视图显示数据时出现Undefined variable错误求助
嘿,我来帮你一步步排查这个「Undefined variable」的问题,咱们从代码里的几个关键错误说起:
你的GuestbookController的index方法返回的是post.post_textarea视图,但你报错的视图是welcome.blade.php啊!这就导致$guestbooks变量根本没被传递到welcome视图里,系统当然会说变量未定义。
解决方法:
如果你要在welcome.blade.php里展示留言,要么修改控制器的返回视图,要么在渲染welcome视图的控制器方法里传递变量。比如如果是HomeController负责渲染首页,就改成这样:
public function index() { $guestbooks = Guestbook::get(); return view('welcome', ['guestbooks' => $guestbooks]); }
或者如果你的首页路由直接指向welcome视图,也要确保对应的控制器逻辑里把$guestbooks传过去。
看你的视图代码,@foreach只包裹了第一个.blog-item,后面两个.blog-item都在循环外面!这就导致后面的$guestbook->created_at、$guestbook->name这些代码在循环外执行,此时$guestbook变量根本不存在,必然报错。
正确写法:把每个要循环生成的.blog-item都放进@foreach里,比如:
@foreach ($guestbooks as $guestbook) <div class="blog-item"> <div class="blog-text text-box text-white"> <div class="top-meta">{{ Carbon\Carbon::parse($guestbook->created_at)->format('d-m-Y') }} / di <a href="">Rakitan</a></div> <h3>{{ $guestbook->name }}</h3> <!-- 这里你之前写的是$guestbooks->name,要改成单个实例$guestbook! --> <p>{!! \Illuminate\Support\Str::words($guestbook->message, 50, '...') !!}</p> <!-- 注意:$post->id也是未定义的,如果你是跳转到留言详情,改成$guestbook->id --> <a href="{{ route('post.read', ['post_id' => $guestbook->id]) }}" class="read-more">Lanjutkan Baca <img src="{{ asset('img/icons/double-arrow.png') }}" alt=""/></a> </div> </div> @endforeach
- 你写了
{{ $guestbooks->name }},$guestbooks是所有留言的集合,不能直接访问name属性,必须用循环里的单个实例$guestbook->name。 asset()函数的用法错了:src="asset/img/icons/double-arrow.png"要改成src="{{ asset('img/icons/double-arrow.png') }}",不然路径解析会出问题。$post->id未定义:视图里根本没传递$post变量,如果你是要跳转到留言的详情页,应该换成$guestbook->id,还要确保对应的路由和控制器能处理这个参数。
你的路由Route::get('/posting','GuestbookController@index')->name('guestbook')指向的是/posting页面,对应控制器返回的是post.post_textarea视图。如果你是在首页(/路径,对应welcome.blade.php)展示留言,一定要确保访问的是正确的路由,或者调整控制器返回的视图。
内容的提问来源于stack exchange,提问作者michael abraham

