2019/09/12

よくLaravelの特徴の一つとしてあげられるファサード。
簡単に独自クラスのメソッドを呼び出せるようにした機能です。
Route::get('facade/practice1',function(){
   return Utility::getMessage();
});
Utility::の部分がファサードになります。
例えば、UtilityクラスのgetMessageメソッドに複雑な処理を持たせている場合、ファサードを使わなければロジックをここに長々と書かないといけません。
なるべくロジックの記述を奥にしまいこんで、簡潔にクラスのメソッドを呼び出すようにするのがファサードの役割です。
Laravelが広く受け入れられた理由の一つにファサードがあるので理解しておくべきでしょう。
今回はこのファサードについてエントリーいたします。
ファサードとは
ファサードは クラスメソッド の形式でサービス(クラス)を手軽るに利用できる機能です。
例えば Requestファサードを使う場合
# ContactController.php
public function postIndex()
{
  $name = Request::input('name');
}
このように記述しますが、この Request:: がファサードになります。
ちなみにRequestファサードはLaravelで標準で提供されているファサードです。
config\app.php にあるエイリアスの項目を見るとデフォルトで実装されているファサードが確認できます。
# app\config.php
'aliases' => [
  'App' => Illuminate\Support\Facades\App::class,
  'Artisan' => Illuminate\Support\Facades\Artisan::class,
  'Auth' => Illuminate\Support\Facades\Auth::class,
:
  'Request' => Illuminate\Support\Facades\Request::class,
:
  ],
ファサード名(キー)とファサードの実体であるクラス(バリュー)がセットされているのがわかります。
これを見ると例えば Requestファサードの実体ファイルは Illuminate\Support\Facades\Request::class であることがわかります。
このクラスはLaravelのプロジェクトでは vendor\laravel\framework\src\Illuminate\Support\Facades\Request.php に置かれています。
標準で用意されているファサード
Laravelでは標準で37種類のファサードが提供されています。
その中から特によく使いそうなファサードは以下になります。
| Facade | 使い方 | 
|---|---|
| Route | ルーティングをする際に使う。Laravelで最初に目にするファサード | 
| Request | $_REQUEST周りの処理。POST/GET送信の受け取り時に使用。 | 
| Config | config/app.phpの値を取得する | 
| DB | DBを操作する際にクエリビルダを提供。通常はEloquentを使う。 | 
| Log | ログの書き出しなど。storage/logsなどに書き出せるのでデバッグなどで重宝する。 | 
独自にファサード作成する
Laravelで標準で実装されているファサードを紹介しました。
しかし、自分オリジナルのクラスを作成して、ファサードとして使うこともできます。
その場合、
config\app.phpに登録・ファサードを作成し
config\app.phpに登録
この二つの作業が必要になります。
サービスプロバイダに関しては以前エントリーしました。
具体的な作成手順としては
サービスプロバイダを作成し設定ファイルに登録
- 1.オリジナルのクラスを作成
- 2.サービスプロバイダの作成
- 3.サービスプロバイダにオリジナルクラスをバインド
- 4.config\app.phpに登録
ファサードを作成し設定ファイルに登録
- 1.ファサードを作成
- 2.ファサードにサービスプロバイダで記述したキーを設定
- 3.config\app.phpのエイリアスに登録
- 4.オリジナルクラスを使いたいところにファサードとして使う
このような作業手順になります。
具体的な演習に関しては別途エントリーしているので、よければ参考にしてください。
 
ファサードについては以上です。

仕事で Laravel を使っています。気づいたことや新しい発見など情報を発信していきます。問い合わせはこちら。