在laravel中为每个视图共享变量似乎不起作用

时间:2017-06-13 09:03:53

标签: php laravel

我试图将查询结果与所有观点分享,但似乎没有效果。

我的分类模型中有

public function getAllImageCategories()
{
    $categoires = Category::all();
    return $categoires;
}

然后在我的HomeController __constructor中

public function __construct()
{
    $Category = new Category;
    $allCategories = $Category->getAllImageCategories();

    View::share('allCategories', $allCategories);
    $this->middleware('auth');
}

在视图中

@foreach($allCategories as $category)
  <li><a href="#"><i class="fa fa-btn fa-sign-out"></i>{!! $category->name !!}</a></li>
@endforeach

错误

  

未定义的变量:allCategories

为什么会出现这个错误?我错在哪里?

2 个答案:

答案 0 :(得分:2)

我建议您将View Composer用于所有视图页面。

https://laravel.com/docs/5.4/views#view-composers

否则,您可以在同一页面上使用在所有视图中共享数据 转到

your/project/directroy/app/Providers/AppServiceProvider.php

并将您的代码添加到启动方法

public function boot()
{
    $Category = new Category;
    $allCategories = $Category->getAllImageCategories();
    View::share('allCategories', $allCategories);
}

答案 1 :(得分:0)

您应该将代码放入服务提供商的boot()方法中:

public function boot()
{
    $Category = new Category;
    $allCategories = $Category->getAllImageCategories();
    View::share('allCategories', $allCategories);
}
  

您应该在服务提供商的boot方法中拨打电话进行分享。您可以自由地将它们添加到AppServiceProvider或生成一个单独的服务提供商来容纳它们。

https://laravel.com/docs/5.4/views#sharing-data-with-all-views