首页 > 解决方案 > (Laravel 8.x)从数据库中获取数据并直接从主布局中使用它而不从参数传递它

问题描述

我的问题

Framework : Laravel 8.x

我想从 DB 调用我的菜单并在 处使用它layout.blade.php,但我将它layout.blade.php用作我的视图的主布局,所以它只是从其他视图扩展而来。

所以,我打电话就是这样。

布局.blade.php

<!DOCTYPE html>
... some codes ...

<!-- Menu Navigation Before Using DB -->
<ul>
    <li>Menu 1</li>
    <li>Menu 2</li>
    <li>Menu 3</li>
    <li>Menu 4</li>
    <li>Menu 5</li>
</ul>

<!-- Menu Navigation After Using DB -->
<ul>
@foreach ($menus as $menu)
  <li>{{ $menu->name }}</li>
@endforeach
</ul>

<!-- Body Content -->
@yield('body_content')

索引控制器.php

public function index()
{
   return view('index_page', ['menus' => $getMenusFromDB]); //just for example
}

index.blade.php

@extends('layout', ['menus' => $menus])

@section('body_content')
<p>Hello World !</p>
@endsection

我有很多视图链接到这个布局,所以我不能传递这样的menus参数。

我的问题

我如何$menus直接使用从 DB 调用的这个来使用它layout.blade.php而不从我的扩展视图中传递它?

标签: laravel

解决方案


:) 你很幸运!Laravel 有一个预先构建的功能,可以与所有视图共享数据。请查看他们的文档

例如:

App\Providers\AppServiceProvider.php

use Illuminate\Support\Facades\View;

class AppServiceProvider extends ServiceProvider
{

    public function boot()
    {
        
        // Just do it like how you would normally pass data with view helpers
        View::share('$menus', '$menuFromDB');
    }
}

布局.blade.php

<ul>
@foreach ($menus as $menu)
  <li>{{ $menu->name }}</li>
@endforeach
</ul>

推荐阅读