zoukankan      html  css  js  c++  java
  • Laravel 5 多个视图共享数据的方法

     

    我们都知道模板一般会用到继承,导航栏就是一个很好的例子,但是导航栏的数据如何共享,比如有个导航的文件叫在view/navigation.blade.php
    为了简单一点,文件里只有设置了一个变量
    1
    {{ $cqh }}
    现在的要求是每个页面都会用到这个变量,如何共享这个数据呢?
    一般这样的操作我会在Laravel服务的boot方法里设置,下面介绍两种共享数据的方法
     

    方法一:使用View:share方法,如CqhServiceProvider里

    1
    2
    3
    4
    public function boot()
    {
        View::share('cqh','chenqionghe');
    }
    这是使用外观模式,也可以直接使用view()方法,
    1
    view()->share('cqh''chenqionghe');
    方法二:使用composer方法单独对这个navigation.blade.php进行传送数据,方法如下
    1
    2
    3
    4
    5
    6
    public function boot()
    {
        view()->composer('navigation'function ($view) {
            $view->with('cqh','chenqionghe');
        });
    }
    以上是使用闭包的形式来完成这个操作,其实这和路由一样,也可以用类来代替,Laravel里叫组件,方法如下
    1
    2
    3
    4
    public function boot()
    {
        View::composer('navigation''AppHttpViewComposersMyViewComposer');
    }
    上面这样就是注册了视图组件,并且在每次 navigation视图渲染的时候,MyViewComposer@compose 都将会被执行。
    下面我们来看这个组件怎么定义
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?php namespace AppHttpViewComposers;
    use IlluminateContractsViewView;
    class MyViewComposer
    {
        public function compose(View $view)
        {
            $view->with('cqh','chenqionghe');
        }
    }
    在视图被渲染之前,视图组件的 compose 方法就会被调用,并且传入一个 IlluminateContractsViewView 实例。你可以使用 with 方法来把数据绑定到 view。
     
     
    注意:方法一和方法二其实是有区别的,方法一是对所有的视图都传递的cqh数据,而方法二只是对navigation视图传递了cqh数据
    如果方法二要达到方法一的效果,可以这样
    1
    2
    3
    4
    View::composer('*'function($view)
    {
        //
    });
    这样就会对所有视图进行传递了
     
    也可以针对多个视图指定MyViewComposer组件
    1
    View::composer(['navigation''footer'], 'AppHttpViewComposersMyViewComposer');
    也可以使用 composers 方法来同时定义一群视图组件
    1
    2
    3
    4
    5
    View::composers([
        'AppHttpViewComposersAdminComposer' => ['admin.index''admin.profile'],
        'AppHttpViewComposersUserComposer' => 'user',
        'AppHttpViewComposersProductComposer' => 'product'
    ]);
  • 相关阅读:
    检查你的iOS程序是否正在被调试
    破解从 AppStore 下载的 IPA
    在 iOS 中如何发短信
    关于移动应用UI部分管理的一些思考
    在 iOS 应用中实现飞行模式提醒
    如何在iOS应用中拨打电话,并让用户确认
    [转]How to hide inputAccessoryView without dismissing keyboard
    php 读取文件并以文件方式下载
    一个session,判断用户唯一的技巧
    一个简单文件上传代码
  • 原文地址:https://www.cnblogs.com/mouseleo/p/10312510.html
Copyright © 2011-2022 走看看