開發過程中許多時候都會向公共模板賦值,例如頂部導覽欄,頁面底部等等,不可能在每個控制器中都賦值一遍。
Laravel 中解決方法如下:
修改
App\Providers\AppServiceProvider
在boot方法中加入
View()->composer('common.header',function ($view){ //common.header 對應Blade模板
$view->with('key', 'value');
});
也可以將值賦值給所有範本
View()->share('key', 'value');
=====================================
view composers 與視圖有關,用在一個service provider 的boot()函數裡,就是讓一個view加載的時候,由於view composer的作用,去調用某個函數傳個參啊啥的。
1,建立service provider
##再把ComposerServiceProvider加到php artisan make:provider 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函數是預設的),如果你想換一個就
@foobar');<a href="https://my.oschina.net/u/862816" class="referer" target="_blank"> //自己定義的方法</a>
##這裡就執行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); });更多PHP相關技術文章,請造訪PHP教學欄位進行學習!
以上是Laravel 為公共模板賦值的詳細內容。更多資訊請關注PHP中文網其他相關文章!