laravel5.5 视图共享数据

视图间共享数据

  • 视图门面 share() 方法
  • 视图门面 composer() 方法
tips:都是使用 View 门面来访问 Illuminate\Contracts\View\Factory 的底层实现

视图share()

有时须要在全部视图之间共享数据片断,这时候能够使用视图门面的 share 方法。php

1,通常状况下,我会在app\http\Controllers\xx下建立一个基础控制器 BaseController.phpjson

<?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.phpcomposer.jsonautoload引入数组

"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()

视图合成器是当视图被渲染时的 回调函数类方法 ,若是你每次渲染视图时都要绑定视图的数据,好比用户登录信息。能够使用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.phpide

<?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 方法来绑定数据到视图。函数

全部的视图合成器都会经过 服务容器 进行解析,因此你能够在视图合成器的构造函数中类型提示须要注入的依赖项。
相关文章
相关标签/搜索