laravel 服務提供者 facade初使用及理解
阿新 • • 發佈:2019-02-06
使用服務提供者註冊服務進行依賴注入後可以直接Class::method()呼叫否則得自己new一個例項
facade其實就是建立一個靜態類<?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; }); } }
<?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就相當於幫你依賴注入了