【问题标题】:Undefined variable when trying to pass data to the view - Laravel 5尝试将数据传递给视图时未定义的变量 - Laravel 5
【发布时间】:2016-02-20 23:18:25
【问题描述】:

我正在尝试在我的所有页面上包含一个视图(代码如下),因此我已将它包含在我的布局模板中(因此它呈现在所有内容上)。不幸的是,当我尝试运行任何页面时 - 会出现此错误:

未定义变量:网站(查看: /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

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

非常感谢您的帮助。

【问题讨论】:

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


    【解决方案1】:

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

    您有几个选择:

    1. 包含文件时添加变量

    @include('layouts.check', ['sites' => $sites]) (但您仍需要将 $sites 从控制器传递到主视图。)

    1. 添加视图编辑器,每次包含视图时添加此变量

    见: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());
        });
    }
    

    【讨论】:

      【解决方案2】:

      试试这个

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

      注意:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-03-14
        • 2022-08-18
        • 2015-06-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-06-06
        相关资源
        最近更新 更多