Edited at

【Laravel 5.4】ファサード の作り方(でも多用は良くない)

ファサードはスタティックな関数的に使えるので便利といえば便利。

だけど、使い勝手が良い反面、弊害もあるみたい。(後述)

それでは作り方を・・・。


クラス作成

場所はサービスプロバイダ側でひもづけできていれば、必ずしも app/Services である必要はなさそう。


app/Services/Payment.php

<?php

namespace App\Services;

class Payment {
public function process()
{
// ここに何やかの処理を記述する。
}
}



サービスプロバイダ作成

artisan コマンドでスカフォールド

php artisan make:provider PaymentServiceProvider

レジスタ部分にバインドを記述


app/Providers/PaymentServiceProvide.php

<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;

class PaymentServiceProvider extends ServiceProvider {
public function boot()
{
//
}

public function register()
{
$this->app->bind(
'payment', // キーとクラスをバインド
'App\Services\Payment'
);
}
}



ファサードクラスを作成


app/Facades/Payment.php

<?php

namespace App\Facades;

use Illuminate\Support\Facades\Facade;

class Payment extends Facade {
protected static function getFacadeAccessor() {
return 'payment'; // バインドキーを返す。
}
}



サービスプロバイダと別名の設定を追加する。


config/app.php

<?php

return [
:
'providers' => [
:
App\Providers\PaymentServiceProvider::class,
],
'aliases' => [
:
'Payment' => App\Facades\Payment::class,
],


使い方

これで以下の様に使えるようになる。

use はファサードを指定する。

use App\Facades\Payment;

Payment::process();


でも、なんかファサードは多用すると良くないらしい orz

便利に使える反面

なんでも盛り込もうとするとコードがスパゲティ化したりする。

かと言って、全くファサードを使わないっていうのも極論と思うし。

標準関数レベルの汎用ファサードを適材適所で使おうってことだね。

参考:ファサード警察

- 目次 -