ファサードについて

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 を使っています。気づいたことや新しい発見など情報を発信していきます。問い合わせはこちら

>> Twitter をフォローする

 

-実践知識