@include具有控制器功能的视图 - Laravel 5.4

时间:2017-07-06 09:46:47

标签: php laravel

我正在为我的网络应用程序创建个人资料页面。在此视图profile.blade.php中,我想包含视图progress/index.blade.php。我有以下结构:

  

profile.blade.php

<div class="panel panel-default">
        <div class="panel-heading clearfix">
            <h1 class="panel-title pull-left">{{ $user->name }} Progress</h1>
        </div>
        <div class="panel-body">
            @include('client.progress.index')
        </div>
</div>
  

web.php

Route::group(['middleware' => ['auth', 'client'], 'prefix' => 'client', 'as' => 'client.'], function () {
    Route::get('home', 'Client\HomeController@index')->name('home');
    Route::get('profile', 'Client\UserController@profile')->name('profile');
    Route::get('progress', 'Client\UserController@progress')->name('progress.index');
});
  

UserController中@进展

public function progress(){

        $auth = Auth::user();
        $progressPictures = Picture::select('*')
            ->where('user_id', $auth->id)
            ->get();

        return view('client.progress.index', ['progressPictures' => $progressPictures]);
    }
  

client.progress.index

<p>Progress pictures</p>

@foreach($progressPictures as $progressPicture)
    <img src="/storage/uploads/progress/{{ $progressPicture }}" style="width:150px; height:150px; float:left; border-radius:50%; margin-right:25px;">
@endforeach

当我从index.blade.php删除php部分时,该网站正常运行。但是当我添加foreach循环时,$progressPictures未定义。我没有以某种方式调用UserController@progress。有人可以帮我这个吗?

3 个答案:

答案 0 :(得分:1)

通常根据我的观察,变量没有进入视图,因为您正在路由到另一个视图,而另一个视图由另一个控制器处理。

您可以采用的方法之一就是要有一个特性,您可以轻松地重复使用progressPictures的结果,或者因为您很快就需要它,您可能需要在profile中复制此代码。 UserController中的方法,以便您也可以在个人资料页面中显示progressPictures

所以你有:

public function profile()
{
    //codes before or after
    $auth = Auth::user();
    $progressPictures = Picture::select('*')
        ->where('user_id', $auth->id)
        ->get();
    //......
    return view('profile', compact('progressPictures'));
  

Ps:一般不推荐不必要的代码重复,但我会先这样做,然后再清理一下。

答案 1 :(得分:0)

将此更改为

return view('client.progress.index', ['progressPictures' => $progressPictures]);

到这个

return view('client.progress.index')-> with('progressPictures', $progressPictures);

答案 2 :(得分:0)

更改

@include('client.progress.index')

@include('client.progress.index', ['progressPictures' => $progressPictures])