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

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

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

    	public function boot()
    	{
    		View::share('cqh','chenqionghe');
    	}
    
    这是使用外观模式,也可以直接使用view()方法,
    view()->share('cqh', 'chenqionghe');
    
    方法二:使用composer方法单独对这个navigation.blade.php进行传送数据,方法如下
    	public function boot()
    	{
    		view()->composer('navigation', function ($view) {
    			$view->with('cqh','chenqionghe');
    		});
    	}
    
    以上是使用闭包的形式来完成这个操作,其实这和路由一样,也可以用类来代替,Laravel里叫组件,方法如下
    	public function boot()
    	{
    		View::composer('navigation', 'AppHttpViewComposersMyViewComposer');
    	}
    
    上面这样就是注册了视图组件,并且在每次 navigation视图渲染的时候,MyViewComposer@compose 都将会被执行。
    下面我们来看这个组件怎么定义
    <?php namespace AppHttpViewComposers;
    use IlluminateContractsViewView;
    class MyViewComposer
    {
        public function compose(View $view)
        {
            $view->with('cqh','chenqionghe');
        }
    }
    
    在视图被渲染之前,视图组件的 compose 方法就会被调用,并且传入一个 IlluminateContractsViewView 实例。你可以使用 with 方法来把数据绑定到 view。
     
     
    注意:方法一和方法二其实是有区别的,方法一是对所有的视图都传递的cqh数据,而方法二只是对navigation视图传递了cqh数据
    如果方法二要达到方法一的效果,可以这样
    View::composer('*', function($view)
    {
        //
    });
    
    这样就会对所有视图进行传递了
     
    也可以针对多个视图指定MyViewComposer组件
    View::composer(['navigation', 'footer'], 'AppHttpViewComposersMyViewComposer');
    
    也可以使用 composers 方法来同时定义一群视图组件
    View::composers([
        'AppHttpViewComposersAdminComposer' => ['admin.index', 'admin.profile'],
        'AppHttpViewComposersUserComposer' => 'user',
        'AppHttpViewComposersProductComposer' => 'product'
    ]);
    
  • 相关阅读:
    LeetCode "Jump Game"
    LeetCode "Pow(x,n)"
    LeetCode "Reverse Linked List II"
    LeetCode "Unique Binary Search Trees II"
    LeetCode "Combination Sum II"
    LeetCode "Divide Two Integers"
    LeetCode "First Missing Positive"
    LeetCode "Clone Graph"
    LeetCode "Decode Ways"
    LeetCode "Combinations"
  • 原文地址:https://www.cnblogs.com/chenqionghe/p/4881467.html
Copyright © 2011-2022 走看看