视图中未定义的变量

时间:2019-06-16 12:04:39

标签: php laravel view

我在视图错误中遇到未定义变量的问题。我已经在寻找解决方案,但没有一个真正帮助或使我弄清楚这是怎么回事。

我已经完成了将数据从控制器传递到视图的工作,而没有任何问题。这就是为什么我不明白为什么它不起作用的原因。我正在尝试根据用户可能点击的链接访问特定的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变量在控制器中定义,并传递给视图。我不太明白为什么我仍然将其作为未定义变量 我应该以不同的方式定义路线,链接吗?有什么我想念的地方吗?感谢帮助

4 个答案:

答案 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]);
}