美文网首页
Laravel view视图共享数据

Laravel view视图共享数据

作者: 是彬不是杉 | 来源:发表于2020-11-13 15:41 被阅读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>

相关文章

  • Laravel view视图共享数据

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

  • Laravel视图组件共享数据

    做项目时会共享一些数据,比如布局文件中layouts/_sidebar.blade.php的菜单数据在每个页面都会...

  • oracle的那些事

    1.oracle视图操作 创建视图:create view视图名称as查询数据; 删除视图:drop view...

  • php菜鸟笔记,laravel 入门教程

    安装 Laravel: 配置 Laravel: 配置路由: 视图传值: Blade模板: Model操作: 数据库:

  • 详解vue原理实现Object.defineProperty的应

    vue中的mvvm就是数据双向绑定,也就是数据model通过viewmodel影响视图view,视图view通过v...

  • MVVM 2021-07-15

    mvvm :m:model 数据v: view 视图层vm:viewModel 视图数据连接层

  • android 架构组件

    Mvvm Model–View–ViewModel (数据双向绑定)model: 数据层view: 视图层Vie...

  • SwiftUI之EnvironmentObject

    如何使用@EnvironmentObject在视图之间共享数据 对于应该与整个应用程序中的所有视图共享的数据,Sw...

  • Laravel 视图

    第四章 Laravel 视图 视图定义 视图标签 blade模板布局 数据处理 加载静态资源 4.1 创建视...

  • 何谓MVC、MVP、MVVM

    Model(数据层):负责处理数据逻辑。View(视图层):负责处理视图显示,在Android中使用xml描述视图...

网友评论

      本文标题:Laravel view视图共享数据

      本文链接:https://www.haomeiwen.com/subject/mizvbktx.html