web-dev-qa-db-ja.com

Laravel-変数をレイアウト部分ビューに渡す方法

ナビゲーションバーであるマスターレイアウトの部分ビューがあります。私は変数を持っています$userApps。この変数は、ユーザーがアプリを有効にしているかどうか(true)を確認します。有効になっている場合は、ナビゲーションバーにアプリへのリンクを表示します。

ホームページはpartials.navbarを含むmaster.layoutを拡張します

Navbar.blade.phpの私のコードはこれです:

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

ただし、未定義の変数エラーが発生します。これをコントローラーを使用する通常のビューで使用する場合、変数を宣言してコントローラーをビューにルーティングした後、正常に機能します。コントローラーを部分ビューにルーティングできないため、コントローラーをレイアウトに配置できないと思います。これをエレガントに行うにはどうすればよいですか?

7
pleasega

どのバージョンの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')

resources/views/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

したがって、問題は他の何かにあるに違いありません。パスと変数名を確認してください。

14
Yuri Tkachenko

このアプローチは非常に簡単です。

親ビュー:

@include('partial.sub_view1', ['This is value1' => $var1])

サブビュー:

{{ $var1 }}
2
partho

他の答えは私にはうまくいかなかったか、古いバージョンでしか機能しないようです。 Laravel 7.xなどの新しいバージョンの場合、構文は次のとおりです。

親ビューの場合:

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

サブビュー:

{{ $var1 }}
0
gpsugy

@include( 'ビューアドレス'、array( 'ビュー内の変数(例:id = $ something' => 'この変数の値'))

0