tips:都是使用 View 门面来访问
Illuminate\Contracts\View\Factory
的底层实现
有时须要在全部视图之间共享数据片断,这时候能够使用视图门面的 share 方法。php
1,通常状况下,我会在app\http\Controllers\xx
下建立一个基础控制器 BaseController.php
,json
<?php namespace App\Http\Controllers\ExtMan; use Illuminate\Routing\Controller; class BaseController extends Controller { public function __construct(\Auth $auth) { $this->initViewShare(); //视图共享数据 } /** * 视图共享数据方法 */ public function initViewShare() { view()->share('action_name',get_action_name()); //当前URL的方法器名 } } //视图使用 //共享视图通常都是在layout中 {{ $action_name }}
get_action_name() 是自定义的一个函数。tips:
建立app\Helpers\ExtmanFun.php
,composer.json
的autoload
引入数组
"files":[ "app/Helpers/ExtmanFun.php" ]
运行
composer dump-autoload
会自动加载
2,在 AppServiceProvider
服务提供器(或者新建提供器) 的boot
方法中调用share()
app
<?php namespace App\Providers; use View; class AppServiceProvider extends ServiceProvider { /** * 启动全部应用服务 * * @return void */ public function boot() { View::share('key', 'value'); //也可以使用 view()->share('name','共享数据片断'); } }
视图合成器是当视图被渲染时的 回调函数 或 类方法 ,若是你每次渲染视图时都要绑定视图的数据,好比用户登录信息。能够使用composer()
将逻辑组织到一个单独的地方。
本例中,咱们将在AppServiceProvider
服务提供器中注册视图合成器,
提供器代码以下:composer
<?php namespace App\Providers; #use Illuminate\Support\Facades\View; use Illuminate\Support\ServiceProvider; class AppServiceProvider extends ServiceProvider { public function boot() { // 使用基于类方法 // 第一个参数能够指定共享给那个视图,多个视图用数组,共享到所有视图能够用 * // 或者某个目录下全部视图 view()->composer( //'*', 'App\Http\ViewComposers\AuthComposer' //['extman.home, welcome'], 'App\Http\ViewComposers\AuthComposer' ['extman.*'], 'App\Http\ViewComposers\AuthComposer' ); //使用基于回调函数 view()->composer('*',function($view){ $view->with('user',array('name'=>'test','avatar'=>'/path/to/test.jpg')); }); } other code }
若是建立一个新的服务提供器来包含视图composer 注册,须要添加该服务提供者到配置文件 config/app.php 的 providers 数组中
到此已经注册了视图合成器,每次渲染 extman
目录下全部视图时都会执行 AuthComposer@compose
方法。
定义视图合成器类 App\Http\ViewComposers\AuthComposer.php
ide
<?php namespace App\Http\ViewComposers; use Illuminate\View\View; use Illuminate\Repositories\UserRepository; class AuthComposer { protected $users; public function __construct(UserRepository $users) { // 依赖注入经过服务容器自动解析... $this->users = $users; } //绑定数据到视图 public function compose(View $view) { $user_info = \Auth::user(); $view->with('motto', $user_info); $view->with('count', $this->users->count()); } }
视图被渲染前,AuthComposer
类的 compose
方法被调用,同时 Illuminate\View\View
实例被注入该方法,从而能够使用其 with 方法来绑定数据到视图。函数
全部的视图合成器都会经过 服务容器 进行解析,因此你能够在视图合成器的构造函数中类型提示须要注入的依赖项。