Laravel - 如何将变量传递到布局部分视图

2022-08-31 00:20:14

我在主布局中有一个部分视图,即导航栏。我有一个变量。此变量检查用户是否已启用应用程序(true),如果启用,则我想在导航栏中显示指向该应用程序的链接。$userApps

主页扩展了 master.layout,其中包括 partials.navbar

我在navbar.blade中的代码.php是这样的:

@if ($userApps)
    // display link
@endif

但是,我得到一个未定义的变量错误。如果我在带有控制器的普通视图中使用它,则在声明变量并将控制器路由到视图后,它可以正常工作。我不认为我可以将控制器放在布局中,因为我无法将控制器路由到部分视图,那么我如何优雅地做到这一点?


答案 1

你使用什么版本的Laravel?对于您的情况,应该是这样的:

@include('partials.navbar', ['userApps' => $userApps])

只是为了测试目的,我在本地做了,它的工作原理:

路线.php

Route::get('/', function () {
    // passing variable to view
    return view('welcome')->with(
        ['fooVar' => 'bar']
    );
});

resources/views/welcome.blade.php

// extanding layout
@extends('layouts.default')

资源/视图/布局/默认.blade.php

// including partial and passing variable
@include('partials.navbar', ['fooVar' => $fooVar])

resources/views/partials/navbar.blade.php

// working with variable
@if ($fooVar == 'bar')
  <h1>Navbar</h1>
@endif

所以问题一定在别的东西上。检查路径和变量名称。


答案 2

其他答案对我不起作用,或者似乎只适用于旧版本。对于较新版本(如 Laravel 7.x),语法如下所示。

在父视图中:

@include('partial.sub_view', ['var1' => 'this is the value'])

在子视图中:

{{ $var1 }}

推荐