laravel 服务提供者 facade初使用及理解

使用服务提供者注册服务进行依赖注入后可以直接Class::method()调用否则得自己new一个实例

<?php


namespace App\Providers;


use Illuminate\Support\ServiceProvider;


class MyViewComposer extends ServiceProvider
{
    /**
     * Bootstrap the application services.
     *
     * @return void
     */
    public function boot()
    {
        //
    }


    /**
     * Register the application services.
     *
     * @return void
     */
    public function register()
    {
        $this->app->singleton('myviewcomposera',function(){
            //return new TestService();
            return new \App\Http\ViewComposers\MyViewComposer;
        });


        $this->app->bind('App\Contracts\ComposerContract', function() //两种绑定方式
        {
            return new \App\Http\ViewComposers\MyViewComposer;
        });
    }
}
facade其实就是创建一个静态类

<?php
namespace App\Facades;
use Illuminate\Support\Facades\Facade;

class MyViewComposer extends Facade {

    protected static function getFacadeAccessor() { return 'myviewcomposera'; }

}
config文件夹app.php中注册别名
 'MyViewComposer' => App\Facades\MyViewComposer::class,
创建契约接口方便后面依赖注入
<?php


namespace App\Contracts;
use Illuminate\Contracts\View\View;


interface ComposerContract
{
    public function compose(View $view);
    public function setnavbar($data);  
}
创建类

<?php namespace App\Http\ViewComposers;
use Illuminate\Contracts\View\View;
use App\Contracts\ComposerContract;
use Cache;
use Carbon\Carbon;
class MyViewComposer implements ComposerContract
{
    public function compose(View $view)
    { 
        $view->with('sitename',Cache::get('navbar',[1,0,0,0]));
    }
    public function setnavbar($data){
    	Cache::put('navbar', $data, Carbon::now()->addSeconds(300));
    }
}


使用
<?php

namespace App\Http\Controllers\Admin;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Role;
use App\Permission;
use App\Contracts\ComposerContract;
//use App\Facades\MyViewComposer; //使用全名
use MyViewComposer;//使用别名

class RoleController extends Controller
{
	//自己进行依赖注入
    public function __construct(ComposerContract $test){ //需要取消使用全名注释
        $this->composer = $test;
    }

    public function welcome()
    {
    	$users=Role::get();
    	foreach ($users as $user) {
    		$user->permissions;
    	}
    	// $this->composer->setnavbar([0,0,0,[1,0,0]]); 
         MyViewComposer::setnavbar([0,0,0,[1,0,0]]);
    	//Cache::put('navbar', [0,0,1,0], Carbon::now()->addSeconds(300));
    	return view('admin/role',['roledata'=>$users,'permissions'=>Permission::all()]);
    }

}

facade就相当于帮你依赖注入了


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值