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

ple*_*ega 5 php laravel

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

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

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

@if ($userApps)
    // display link
@endif
Run Code Online (Sandbox Code Playgroud)

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

Yur*_*nko 13

你用的是什么版本的Laravel?应该是这样的:

@include('partials.navbar', ['userApps' => $userApps])
Run Code Online (Sandbox Code Playgroud)

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

routes.php文件

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

资源/视图/ welcome.blade.php

// extanding layout
@extends('layouts.default')
Run Code Online (Sandbox Code Playgroud)

资源/视图/布局/ default.blade.php

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

资源/视图/谐音/ navbar.blade.php

// working with variable
@if ($fooVar == 'bar')
  <h1>Navbar</h1>
@endif
Run Code Online (Sandbox Code Playgroud)

所以问题必须在其他方面...检查路径和变量名称.


gps*_*ugy 8

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

在父视图中:

@include('partial.sub_view', ['var1' => 'this is the value'])
Run Code Online (Sandbox Code Playgroud)

在子视图中:

{{ $var1 }}
Run Code Online (Sandbox Code Playgroud)