ファサードを使ってみる(演習)

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

>> Twitter をフォローする

 

-実践知識