尝试将数据传递给视图时未定义的变量 - Laravel 5

时间:2016-02-20 14:53:55

标签: php laravel blade laravel-5.2 laravel-blade

我试图在我的所有网页上添加一个视图(代码在下面),因此我将其包含在我的布局模板中(因此它会渲染所有内容)。不幸的是,当我尝试运行任何页面时 - 会发生以下错误:

  

未定义变量:sites(查看:   /Users/Documents/audit/resources/views/layouts/check.blade.php)

查看(check.blade.php):

@if (count($sites) == 0)
 // Removed as it is irrelevant.
@endif

控制器:

public function siteCheck()
{
  return View::make('layouts.check')
                  ->with('sites', Site::where('user_id', Auth::id())
                  ->get());
}

我尝试添加视图(显示错误):

@if(!Auth::guest())
  @include('layouts.check')
@endif

N.B。我还没有在路线中添加任何与layouts.check页面相关的代码。

非常感谢你的帮助。

2 个答案:

答案 0 :(得分:1)

问题是,当您包含文件layouts.check时,方法siteCheck()未启动(因此不存在可变的$ sites)。

您有几个选择:

  1. 在输入文件时添加变量
  2. @include('layouts.check', ['sites' => $sites]) (仍然需要从主视图中的控制器传递$sites。)

    1. 添加视图编辑器,每次包含视图时都会添加此变量
    2. 请参阅:https://laravel.com/docs/5.2/views#view-composers

      在你的情况下,它看起来像这样:

      public function boot()
      {
          view()->composer('layouts.check', function ($view) {
      
              $view->with('sites', Site::where('user_id', Auth::id())
                    ->get());
          });
      }
      

答案 1 :(得分:0)

尝试这个

@if(isset($sites)&&count($sites) == 0)
 // Removed as it is irrelevant.
@endif

注意:

当您使用@include('layouts.check')时未设置$sites