WEB/システム/IT技術ブログ

Laravelで共通メソッドをファサード(Facade)で実装してみる

Laravelで共通メソッドをファサードで実装してみます。

Laravelで共通処理をどのように実装するのが最適なのか悩んでいました。
少し調べてみてたら、シンプルに任意のフォルダにクラスを配置して、それを読み込んでいる方もいらっしゃるようです。
それでも特に問題ないのですが、せっかくLaravelを使ってるので、Laravelの機能を使って、それっぽく実装してみたい。。

そこで、今回はファサードを利用して、共通メソッドを用意してみました。

共通クラスを作成

まず、共通化したい処理をまとめてた任意のクラス「…/app/MyClasses/Util.php」を用意します。
処理はシンプルに「Hello Facade!」を出力するメソッドのみです。

<?php
namespace App\MyClasses;
class Util
{
	public function hello()
	{
		return 'Hello Facade!';
	}
}

ファサードを作成

次に、共通クラスを利用するためのファサードを作成します。
フォルダ「…/app/Facades/」を新規で作成して、そこに新規ファイル「Util.php」を作成し、以下を記述します。

<?php
namespace App\Facades;
use Illuminate\Support\Facades\Facade;
class Util extends Facade
{
	protected static function getFacadeAccessor()
	{
		return 'util';
	}
}


作成したファサードはエイリアス登録します。
ファイル「…/config/app.php」を開き、「aliases」の部分に以下を追記します。

	'aliases' => [
		(既存のエイリアスの記述)
		...
		'Util' => App\Facades\Util::class,
	],

サービスプロバイダの用意

次に、作成したファサードに共通クラスを登録するためのサービスプロバイダを用意します。
デフォルトのサービスプロバイダ「…/app/Providers/AppServiceProvider.php」を使用することも可能ですが、今回はそれ用に新規作成します。
以下のコマンドでサービスプロバイダ「…/app/Providers/UtilServiceProvider.php」を作成します。

> php artisan make:provider UtilServiceProvider

作成したサービスプロバイダを開き、メソッドregister()でシングルトン結合します。
第1引数には先ほどファサードのメソッドgetFacadeAccessor()で返す値、第2引数に共通クラスを指定します。

class UtilServiceProvider extends ServiceProvider
{
	public function register()
	{
		app()->singleton('util', 'App\MyClasses\Util');
	}

サービスプロバイダは「…/config/app.php」に登録しないと機能しないので、ファイルを開き、「providers」の部分に以下を追記します。

	'providers' => [
		(既存のクラスの記述)
		...
		App\Providers\UtilServiceProvider::class,
	],

ファサードを利用する

先ほど、ファサードをエイリアス登録したので、以下のようにしてコントローラ内などで実行できます。

Util::hello();

コードに問題がなければ「Hello Facade!」と出力されるはずです。

理解するまで、ちょっと大変かもしれませんが、慣れればいろいろ活用できそうです。

B!

Comment

コメントはありません

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

Monthly Archives