ナビゲーションバーであるマスターレイアウトの部分ビューがあります。私は変数を持っています$userApps
。この変数は、ユーザーがアプリを有効にしているかどうか(true)を確認します。有効になっている場合は、ナビゲーションバーにアプリへのリンクを表示します。
ホームページはpartials.navbarを含むmaster.layoutを拡張します
Navbar.blade.phpの私のコードはこれです:
@if ($userApps)
// display link
@endif
ただし、未定義の変数エラーが発生します。これをコントローラーを使用する通常のビューで使用する場合、変数を宣言してコントローラーをビューにルーティングした後、正常に機能します。コントローラーを部分ビューにルーティングできないため、コントローラーをレイアウトに配置できないと思います。これをエレガントに行うにはどうすればよいですか?
どのバージョンの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
したがって、問題は他の何かにあるに違いありません。パスと変数名を確認してください。
このアプローチは非常に簡単です。
親ビュー:
@include('partial.sub_view1', ['This is value1' => $var1])
サブビュー:
{{ $var1 }}
他の答えは私にはうまくいかなかったか、古いバージョンでしか機能しないようです。 Laravel 7.xなどの新しいバージョンの場合、構文は次のとおりです。
親ビューの場合:
@include('partial.sub_view', ['var1' => 'this is the value'])
サブビュー:
{{ $var1 }}
@include( 'ビューアドレス'、array( 'ビュー内の変数(例:id = $ something' => 'この変数の値'))