25
25

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2017-07-07

ファサードはスタティックな関数的に使えるので便利といえば便利。
だけど、使い勝手が良い反面、弊害もあるみたい。(後述)

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

クラス作成

場所はサービスプロバイダ側でひもづけできていれば、必ずしも 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

便利に使える反面
なんでも盛り込もうとするとコードがスパゲティ化したりする。
かと言って、全くファサードを使わないっていうのも極論と思うし。
標準関数レベルの汎用ファサードを適材適所で使おうってことだね。

参考:ファサード警察

- 目次 -

25
25
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
25
25

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?