ファサードはスタティックな関数的に使えるので便利といえば便利。
だけど、使い勝手が良い反面、弊害もあるみたい。(後述)
それでは作り方を・・・。
クラス作成
場所はサービスプロバイダ側でひもづけできていれば、必ずしも 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
便利に使える反面
なんでも盛り込もうとするとコードがスパゲティ化したりする。
かと言って、全くファサードを使わないっていうのも極論と思うし。
標準関数レベルの汎用ファサードを適材適所で使おうってことだね。
参考:ファサード警察