如何在 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 4 的 Blade.php 模板中使用静态函数?