Laravel view视图共享数据

原文链接: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>
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容