Laravel 向公共模板賦值

開發過程當中許多時候都會向公共模板賦值,好比頂部導航欄,頁面底部等等,不可能在每一個控制器中都賦值一遍。php

Laravel 中解決辦法以下:
修改正則表達式

App\Providers\AppServiceProvider數組

在boot方法中添加app

View()->composer('common.header',function ($view){ //common.header 對應Blade模板
         $view->with('key', 'value');
   });
composer

也能夠向全部模板中賦值ide

 View()->share('key', 'value');函數

=====================================this

view composers 與視圖有關,用在一個service provider 的boot()函數裏,就是讓一個view加載的時候,因爲view composer的做用,去調用某個函數傳個參啊啥的。spa

1,建立service provider.net

php artisan make:provider ComposerServiceProvider

再把ComposerServiceProvider加到config/app.php裏面

2,寫view composer

public function boot()
    {
        view()->composer(
            'app', //模板名
            'App\Http\ViewComposers\MovieComposer'  //方法名或者類中的方法
        );
    }

意思是一旦加載app.blade.php,就執行App\Http\ViewComposers\MovieComposer裏的composer函數(這裏之因此執行composer函數是默認的),若是你想換一個就

view()->composer('app','App\Http\ViewComposers\MovieComposer@foobar'); //本身定義的方法

這裏就執行foobar函數了

App\Http\ViewComposers\MovieComposer.php裏這麼寫

<?php

namespace App\Http\ViewComposers;

use Illuminate\View\View;//**記得引入這個啊(由於在composer函數參數裏使用了View類)**

class MovieComposer
{
    public $movieList = [];
    public function __construct()
    {
        $this->movieList = [
            'Shawshank redemption',
            'Forrest Gump',
        ];
    }
    public function compose(View $view)
    {
        $view->with('latestMovie');
    }
}

3,其餘
當全部模板都要,用*正則表達式

view()->composer('*', function (View $view) {
    //logic goes here
});

想要指定多個view使用,用數組包起來

view()->composer(['nav', 'footer'],'App\Http\ViewComposers\MovieComposer');
或者
 view()->composer(['admin.admin'], function ($view){
            $column =  $this->object_array(DB::table('column')->get());
            foreach($column as $k=>$v){
                $chid = explode(',',$v['childid']);
                foreach($chid as $value){
                    $column[$k]['chname'][] =  $this->object_array(DB::table('column_child')->where('id',$value)->first());
                }
            }
            $view->with('columns',$column);
        });
相關文章
相關標籤/搜索