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}}

{{-- 一个实例: --}}

你可能感兴趣的:(Laravel view视图共享数据)