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

Posted

技术标签:

【中文标题】如何在 Blade 模板中全局使用变量【英文标题】:How can I use variables globally in Blade templates 【发布时间】:2019-05-25 12:25:00 【问题描述】:

我想在我的布局中使用$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'
        ));
    

【问题讨论】:

应该没问题。没有特殊的控制器/模型/任何需要在布局页面中使用变量的东西。是否有未读消息? (dd($unreadMessages);) tnx 但我在哪里放 @include('app', array('unreadMessages' => $unreadMessages)) Laravel: Where to store global arrays data and constants?的可能重复 Laravel 5 - global Blade view variable available in all templates的可能重复 【参考方案1】:

在您的dashboard.blade.php 中,可能有对@include('layouts/app') 或类似内容的引用。如果没有,请搜索您的代码以获取类似的参考。

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

所以,你需要这样的东西:

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

这里有几篇文章可能会有所帮助:

How to include a sub-view in Blade templates? Laravel Blade passing variable with string through @include causes error global Blade view variable available in all templates

【讨论】:

【参考方案2】:

您可以在启动功能中使用 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)
    );
 

【讨论】:

在AuthServiceProvider(App\Providers\AuthServiceProvider)中 试试 view()->composer('*',function($view) )【参考方案3】:

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

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

【讨论】:

我的脚本没有 Route.php 文件 我资助RouteServiceProvider.php,是你的意思吗? 您可以在旧版本 laravel 的 \app\Http 文件夹中找到 route.php。新版本没有类似 route.php 的文件。为此,它们存在一个名为 routers 的文件夹,并包含名为 api.php、console.php 和 web.php 的文件。将代码放在web.php中 关于路由的更多信息可以参考laravel.com/docs/5.3/routing#basic-routing

以上是关于如何在 Blade 模板中全局使用变量的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Laravel Blade 模板中设置变量

如何在 Blade 标签模板中使用本地化?

如何在 laravel 4 的 Blade.php 模板中使用静态函数?

如何在不使用帮助器的情况下访问 Meteor 模板中的全局变量?

如何在Laravel刀片模板中设置变量

如何在 Laravel Blade 模板中编写 PHP 代码?