Laravel5.1入門 その10 はじめてのFacade
Laravelにおけるファサードとは、デザインパターンのファサードとは全く別物なので注意。
単にAPIを使うための機能と捉えておけばいいみたい。
目的
こんな感じでアプリ内からどこでも動くようにする。
<?php use Bar; Bar::is_piyo(); //=> true
本当に動くクラス
巡り巡って本当に動くis_piyo()メソッドを作る。
app/Piyo.php
<?php namespace App; class Piyo { public function is_piyo() { return true; } }
サービスプロバイダ
ファサードを使うためには、IoCコンテナで依存解決できるようにするのが不可欠なので、それを最も簡単に実現できるサービスプロバイダを設置する。
app/Providers/FugaServiceProvider.php
<?php namespace App\Providers; use Illuminate\Support\ServiceProvider; use App\Piyo; class FugaServiceProvider extends ServiceProvider { public function register() { $this->app->bind('piyo', function(){ return new Piyo; }); } }
ファサード
ファサードを継承してファサードを作る。
このときgetFacadeAccessor()をオーバライドして、サービスプロバイダで登録したキー名を返す。
app/Foo/Bar.php
<?php namespace App\Foo; use Illuminate\Support\Facades\Facade; class Bar extends Facade { protected static function getFacadeAccessor() { return 'piyo'; } }
できた
ここまで手間をかけてやっと動く。
<?php //use Bar; //先頭にバックスラッシュでもいける \Bar::is_piyo(); //=> true
またまた、正直ここまでやってファサード使う意味あるの?、という気分だけど、「テストしやすい」とか「綺麗に書ける」とかいろいろ利点はあるようなので、もう少しレールに乗ってみたい。