ファサードとは
ファサードは、クラスメソッド形式でフレームワークの機能を簡単に利用できるもので、Laravelを代表する機能の1つとなります。
ファサードも裏側では、サービスコンテナの機能が使用されています。
ファサードの仕組み
Requestファサードの例
1 2 3 4 |
public function Index() { $strName = Request::input('name') } |
ファサードは「Request::」の部分になります。
config\app.phpの中にあるaliasesキーを確認するとデフォルトで実装されているファサードを確認することができるので、興味がある方は確認しておきましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
'aliases' => [ 'App' => Illuminate\Support\Facades\App::class, 'Arr' => Illuminate\Support\Arr::class, 'Artisan' => Illuminate\Support\Facades\Artisan::class, 'Auth' => Illuminate\Support\Facades\Auth::class, 'Blade' => Illuminate\Support\Facades\Blade::class, 'Broadcast' => Illuminate\Support\Facades\Broadcast::class, 'Bus' => Illuminate\Support\Facades\Bus::class, 'Cache' => Illuminate\Support\Facades\Cache::class, 'Config' => Illuminate\Support\Facades\Config::class, 'Cookie' => Illuminate\Support\Facades\Cookie::class, 'Crypt' => Illuminate\Support\Facades\Crypt::class, 'DB' => Illuminate\Support\Facades\DB::class, 'Eloquent' => Illuminate\Database\Eloquent\Model::class, 'Event' => Illuminate\Support\Facades\Event::class, 'File' => Illuminate\Support\Facades\File::class, 'Gate' => Illuminate\Support\Facades\Gate::class, 'Hash' => Illuminate\Support\Facades\Hash::class, 'Lang' => Illuminate\Support\Facades\Lang::class, 'Log' => Illuminate\Support\Facades\Log::class, 'Mail' => Illuminate\Support\Facades\Mail::class, 'Notification' => Illuminate\Support\Facades\Notification::class, 'Password' => Illuminate\Support\Facades\Password::class, 'Queue' => Illuminate\Support\Facades\Queue::class, 'Redirect' => Illuminate\Support\Facades\Redirect::class, 'Redis' => Illuminate\Support\Facades\Redis::class, 'Request' => Illuminate\Support\Facades\Request::class, 'Response' => Illuminate\Support\Facades\Response::class, 'Route' => Illuminate\Support\Facades\Route::class, 'Schema' => Illuminate\Support\Facades\Schema::class, 'Session' => Illuminate\Support\Facades\Session::class, 'Storage' => Illuminate\Support\Facades\Storage::class, 'Str' => Illuminate\Support\Str::class, 'URL' => Illuminate\Support\Facades\URL::class, 'Validator' => Illuminate\Support\Facades\Validator::class, 'View' => Illuminate\Support\Facades\View::class, ], |
仕組み
1.Config::get(‘app.debug’がコールされる。)
2.Configの実態であるIlluminate\Support\Facades\Configクラスのgetメソッドが呼び出す。
3.Illuminate\Support\Facades\Configクラスには、getメソッドがないため、スーパークラスの__callStaticメソッドを呼び出す。
4.__callStaticメソッドでは、getFacadeRootメソッドで操作対象のインスタンスを取得し、getメソッドを実行する。
用意されているファサード
Laravelは標準で40弱のファサードが用意されております。
その中から特に使用頻度の高いファサードは下記となります。
Facade | 使い方 |
Route | ルーティングの際に使用。 |
Request | $_REQUEST周りの処理。POSTやGET送信の受け取り時に使用。 |
Config | Config/app.phpの値を取得する。 |
DB | DBを操作する際にクエリビルダを提供。 |
Log | ログの書き出しなど。 |
独自にファサードを作成する方法
自分の手作りクラスを作成して、ファサードを使用することも可能です。その場合は下記2つの作業が必要になります。
サービスプロバイダを作成し、config\app.phpに登録
ファサードを作成しconfig\app.phpに登録
Facadeについてのまとめ
フレームワークの機能を手軽に利用することができるのが、ファサードの利点ですが、動作の裏では、フレームワークが肩代わりしていることを認識しておきましょう。