Laravel 5 多个视图共享数据的方法

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

1闭包

2composer

3ide

4spa

public function boot()ci

{路由

    View::share('cqh','chenqionghe');it

}io

这是使用外观模式,也能够直接使用view()方法,table

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', 'App\Http\ViewComposers\MyViewComposer');

}

上面这样就是注册了视图组件,而且在每次 navigation视图渲染的时候,MyViewComposer@compose 都将会被执行。

下面咱们来看这个组件怎么定义

1

2

3

4

5

6

7

8

9

<?php namespace App\Http\ViewComposers;

use Illuminate\Contracts\View\View;

class MyViewComposer

{

    public function compose(View $view)

    {

        $view->with('cqh','chenqionghe');

    }

}

在视图被渲染以前,视图组件的 compose 方法就会被调用,而且传入一个 Illuminate\Contracts\View\View 实例。你能够使用 with 方法来把数据绑定到 view。

 

 

注意:方法一和方法二实际上是有区别的,方法一是对全部的视图都传递的cqh数据,而方法二只是对navigation视图传递了cqh数据

若是方法二要达到方法一的效果,能够这样

1

2

3

4

View::composer('*', function($view)

{

    //

});

这样就会对全部视图进行传递了

 

也能够针对多个视图指定MyViewComposer组件

1

View::composer(['navigation', 'footer'], 'App\Http\ViewComposers\MyViewComposer');

也能够使用 composers 方法来同时定义一群视图组件

1

2

3

4

5

View::composers([

    'App\Http\ViewComposers\AdminComposer' => ['admin.index', 'admin.profile'],

    'App\Http\ViewComposers\UserComposer' => 'user',

    'App\Http\ViewComposers\ProductComposer' => 'product'

]);

相关文章
相关标签/搜索