Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

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

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

クラス作成

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

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

参考:ファサード警察

- 目次 -

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away