Laravel view视图共享数据

2020-11-13  本文已影响0人  是彬不是杉

原文链接:https://www.whongbin.cn/article-detail/151.html

前言

在laravel中有两种可以把变量应用到视图的方式,在这做个记录,方便之后使用.

视图共享数据

1.所有视图共享数据 view()->share()

当所有视图都需要同一个数据时,使用视图工厂的share方法。
全局帮助函数view,如果传入参数,则返回Illuminate\View\View实例,不传入参数则返回Illuminate\View\Factory实例。所以我们可以通过在服务提供者(app\Providers\AppServiceProvider.php)的boot方法中(也可以自建服务进行使用,一般会用于菜单的管理)使用如下方式实现视图间共享数据:

/**
 * Bootstrap any application services.
 *
 * @return void
 */
public function boot()
{
    $verticalMenuJson = file_get_contents(public_path('menus/vertical-menu.json'));
    $menuData = json_decode($verticalMenuJson);
    view()->share('menuData',$menuData);
    // \View()::share('menuData',$menuData);
}

2.指定视图共享数据 view()->composer()

当所有视图都需要同一个数据时,使用视图工厂的share方法。
全局帮助函数view,如果传入参数,则返回Illuminate\View\View实例,不传入参数则返回Illuminate\View\Factory实例。所以我们可以通过在服务提供者(app\Providers\AppServiceProvider.php)的boot方法中(也可以自建服务进行使用,一般会用于菜单的管理)使用如下方式实现视图间共享数据:

/**
 * Bootstrap any application services.
 *
 * @return void
 */
public function boot()
{
    Schema::defaultStringLength(191);
    view()->composer('admin.layout',function($view){
        $menuData = \App\Models\Permission::with(['childs'])->where('parent_id',0)->orderBy('sort','desc')->get();
        $view->with('menuData',$menuData);
    });
}

1.指定一个视图使用加载变量:

view()->composer('admin.layout'],function($view){
    $menuData = \App\Models\Permission::with(['childs'])->where('parent_id',0)->orderBy('sort','desc')->get();
    $view->with('menuData',$menuData);
});

2.指定多个视图使用加载变量:

view()->composer(['admin.layout1','admin.layout2'],function($view){
    $menuData = \App\Models\Permission::with(['childs'])->where('parent_id',0)->orderBy('sort','desc')->get();
    $view->with('menuData',$menuData);
});

3.指定所有视图使用加载变量:

view()->composer('*',function($view){
    $menuData = \App\Models\Permission::with(['childs'])->where('parent_id',0)->orderBy('sort','desc')->get();
    $view->with('menuData',$menuData);
});

使用方式

在视图文件中直接使用输出变量的方式使用就可以了 {{$menuData}}

{{-- 一个实例: --}}
<ul class="nav navbar-nav">
    @if(!empty($menuData) && isset($menuData))
    @foreach ($menuData->menu as $menu)
    <li class="@if(isset($menu->submenu)){{'dropdown'}} @endif nav-item" data-menu="dropdown">
        <a class="@if(isset($menu->submenu)){{'dropdown-toggle'}} @endif nav-link" href="{{asset($menu->url)}}"
            @if(isset($menu->submenu)){{'data-toggle=dropdown'}} @endif
            @if(isset($menu->newTab)){{"target=_blank"}}@endif>
            <i class="menu-livicon" data-icon="{{$menu->icon}}"></i>
            <span>{{ __('locale.'.$menu->name)}}</span>
        </a>
    </li>
    @endforeach
    @endif
</ul>
上一篇 下一篇

猜你喜欢

热点阅读