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'

]);

相關文章
相關標籤/搜索