如何在Blade模板中全局使用变量

时间:2018-12-27 13:08:54

标签: php laravel laravel-5

我想在布局中使用$unreadMessages,但是我不知道全局使用哪个控制器进行布局。 它在dashboardController中,但出现此错误:

  

未定义变量:unreadMessages(查看:   /myhost/resources/views/layouts/app.blade.php)(视图:/   myhost / resources / views / layouts / app.blade.php)

我可以在哪个控制器中定义此变量,以便可以全局使用它?

此代码用于$unreadMessages中的dashboardController

<?php

class DashboardController extends Controller
{

    public function index()
    {
        \Artisan::call('status:check');
        $unreadMessages = TicketMessage::where(['is_read' => 0])->whereIn('ticket_id', $ticketIds)->whereNotIn('user_id', [Auth::user()->id])->count();


        return view('dashboard', compact(
            'unreadMessages'
        ));
    }
}

3 个答案:

答案 0 :(得分:1)

您可以通过在Route.php文件中使用以下代码来解决此问题:

view()->share('unreadMessages', $unreadMessages);

答案 1 :(得分:0)

在您的dashboard.blade.php中,可能引用了@include('layouts/app')或类似名称。如果不是,请在您的代码中搜索与此相似的参考。

您需要将$unreadMessages传递到该子视图。您将其传递到主刀片服务器(dashboard.blade.php),而不是仪表板中包含的刀片服务器(app.blade.php)。

因此,您将需要以下内容:

@include('layouts/app', array('unreadMessages' => $unreadMessages))

以下几篇文章可能会对您有进一步的帮助:

答案 2 :(得分:0)

您可以在启动功能中使用ServiceProvider进行此操作,例如:

 public function boot() {
    ...

    view()->composer(['layouts.app'],function($view) {
        $unreadMessages = TicketMessage::where(['is_read' => 0])->whereIn('ticket_id', $ticketIds)->whereNotIn('user_id', [Auth::user()->id])->count();
        $view->with('unreadMessages',$unreadMessages)
    });
 }