我在视图错误中遇到未定义变量的问题。我已经在寻找解决方案,但没有一个真正帮助或使我弄清楚这是怎么回事。
我已经完成了将数据从控制器传递到视图的工作,而没有任何问题。这就是为什么我不明白为什么它不起作用的原因。我正在尝试根据用户可能点击的链接访问特定的theme
这是我将$themeDetailed
变量传递给视图的控制器代码
/**
* Display the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function show($id)
{
$themeDetailed = Theme::findOrFail($id);
return view('accueil', ['themeDetailed' => $themeDetailed]);
}
accueil
刀片视图代码
<!-- single course -->
@foreach ($themes as $thematique)
<div class="col-md-3 col-sm-6 col-xs-6">
<div class="course">
<a href=" {{ route('themes.show', $themeDetailed->id)}} " class="course-img">
<img src="main/assets/img/course01.jpg" alt="">
<i class="course-link-icon fa fa-link"></i>
</a>
<a class="course-title" href="#">{{$thematique->intitule }} </a>
<div class="course-details">
<span class="course-category">{{$thematique->categorie }}</span>
<span class="course-price course-free">{{$thematique->filiereDesiree }}</span>
</div>
</div>
</div>
@endforeach
<!-- /single course -->
路线
| GET|HEAD | themes | | App\Http\Controllers\ThemeController@index | web,auth |
| POST | themes | themes.store | App\Http\Controllers\ThemeController@store | web |
| GET|HEAD | themes/create | themes.create | App\Http\Controllers\ThemeController@create | web |
| GET|HEAD | themes/{theme} | themes.show | App\Http\Controllers\ThemeController@show | web |
| PUT|PATCH | themes/{theme} | themes.update | App\Http\Controllers\ThemeController@update | web |
| DELETE | themes/{theme} | themes.destroy | App\Http\Controllers\ThemeController@destroy | web |
| GET|HEAD | themes/{theme}/edit | themes.edit | App\Http\Controllers\ThemeController@edit | web |
因此,这是刀片视图中的链接,应该通过控制器获取特定主题:
<a href=" {{ route('themes.show', $themeDetailed->id)}} " class="course-img">
<img src="main/assets/img/course01.jpg" alt="">
<i class="course-link-icon fa fa-link"></i>
</a>
themeDetailed变量在控制器中定义,并传递给视图。我不太明白为什么我仍然将其作为未定义变量 我应该以不同的方式定义路线,链接吗?有什么我想念的地方吗?感谢帮助
答案 0 :(得分:0)
$themes
来自哪里?也许未定义的变量是$themes
确保已将其传递到accueil
视图。
答案 1 :(得分:0)
更改$id
并将$theme
放入您的控制器方法中。尽管我不认为这是问题所在。您的观点显然不是应该的。您将单个记录/集合传递给视图,但是视图代码中存在一个不合适的循环。
什么是未定义的?哪个变量?
答案 2 :(得分:0)
您尝试在视图中循环使用错误的变量:
@foreach ($themes as $thematique)
将其更改为与从Controller返回的名称相同的名称。
如果 Controller 返回:
return view('accueil', ['themeDetailed' => $themeDetailed]);
在视图中,您必须使用:
@foreach ($themeDetailed as $thematique)
如果 Controller 返回:
return view('accueil', ['themes' => $themes]);
在视图中,您必须使用:
@foreach ($themes as $thematique)
答案 3 :(得分:0)
问题是您要使用两个控制器函数将两个变量传递给视图,并且这是不可能的,因为当您调用页面路由时,只会首先调用两个函数中的一个,而另一个则不会,因此路由将不会运行,并且变量将为未定义
您可以简单地通过一个函数将两个变量发送到视图:
public function accueil($id)
{
$themes = Theme::inRandomOrder()->take(8)->get();
$themeDetailed = Theme::findOrFail($id);
return view('accueil', ['themes' => $themes , 'themeDetailed' => $themeDetailed]);
}