Laravelの特徴の一つとしてあげられる『ファサード』機能。
よくプログラマー同士の会話で「Laravelのファサードって便利だよね~」とか言われていたりします。
ファサードについては以前、このブログでも解説した記事をエントリーしました。
ファサードについてよくわからないかたは参考にしてみてください。
今回はオリジナルのクラスを作って、それをファサードとして定義をして使ってみます。
演習
ゴール
「ごきげんよう」というテキストを返すだけの簡単なクラス・メソッドを作成し、ファサードとして定義して使ってみます。
手順
オリジナルのクラスを作成
オリジナルのクラスを app\Services\Utility.php
に作成します。
テキストを返す簡単なメソッドを作りました。
# app\Services\Utility.php
class Utility
{
public static function getMessage(){
return 'ごきげんよう';
}
}
サービスプロバイダを作成
サービスプロバイダのスケルトンを作成。
$ php artisan make:provider UtilityServiceProvider
サービスプロバイダにオリジナルクラスをバインド
artisanコマンドで自動生成されたサービスプロバイダのファイルを開くと、boot()メソッドとregister()メソッドとがあります。
boot()メソッドのほうはそのままにします。
register()メソッドにて、先ほど作成したUtilityクラスをサービスコンテナへ登録します。
# app\Providers\UtilityServiceProvider.php
public function boot()
{
//
}
public function register()
{
$this->app->bind( //サービスコンテナにバインド
'utility', //キー名
'App\Services\Utility' //クラス名
);
}
設定ファイルに登録
config\app.php
にある、providers配列に追記します。
'providers' => [
:
App\Providers\UtilityServiceProvider::class,
],
ファサードの作成
app
ディレクトリ直下にFacades
ディレクトリを作成して、その中にUtility.phpを作成します。
サービスプロバイダで記述したキーをreturn
に記述します。
namespace App\Facades;
use Illuminate\Support\Facades\Facade;
class Utility extends Facade {
protected static function getFacadeAccessor() {
return 'utility'; // サービスプロバイダで記述したキー
}
}
設定ファイルに登録
config\app.php
にある、aliases配列に追記します。
'aliases' => [
:
'Utility' => App\Facades\Utility::class,
],
オリジナルクラスをファサードとして使う
ルーティングファイルにて先ほど作成したファサードを使ってみます。
下記のように、クラスのメソッドを静的メソッドのように記述できます。
Route::get('facade/practice1',function(){
return Utility::getMessage();
});
動作確認
ブラウザでプレビューをして以下のように確認できればOKです。
実務ではもっと複雑なロジックを記述し、コントローラやBladeファイルで使います。
このようにファサードを使うと、バックエンド側を意識せずにコードを書くことができます。
なお、DBを操作するメソッドを書く場合は、ファサードよりもモデルに記述したほうがいいでしょう。
以上です。
仕事で Laravel を使っています。気づいたことや新しい発見など情報を発信していきます。問い合わせはこちら。