なんとなくつかっていたファサードについて少し調べた

普段業務のなかでなんとなく理解していることが多いなと感じたので、 自分のメモとしてなんとなく理解していることをちょこちょこ書いていきます。

ファサードとは

フレームワークの機能を簡単に利用できるもの

例)Config の例

  1. Config::get('app.debug') がコールされる
  2. Configの実体である Illuminate\Support\Facades\Config クラスの getメソッド を呼び出す(config/app.phpaliases にクラス名が定義されている) 

  3. Illuminate\Support\Facades\Config クラス には getメソッド がないため、スーパークラス__callStatic メソッドを呼び出す(スーパークラス = 継承元のクラス:Illuminate/Support/Facades/Facade

  4. __callStatic メソッドでは、getFacadeRoot メソッドで操作対象のインスタンスを取得し、getメソッドを実行する

    /**
    * $method: 実行メソッド名(get)
    * $args: 実行されたメソッドの引数を格納した配列(['app.debug'])
    **/
    public static function __callStatic($method, $args)
    {
        $instance = static::getFacadeRoot(); // ①
    
        if (! $instance) {
            throw new RuntimeException('A facade root has not been set.');
        }
    
        return $instance->$method(...$args); // ②
    }

 ① ファサードが受け持つインスタンスをサービスコンテナから取得

 ② $methodの名前でインスタンスメソッドを実行

Laravel5.* で FORM, HTMLファサードをつかうには

  1. パッケージをインストール
    $ composer require laravelcollective/html

インストールすると、composer.jsonlaravelcollective/html が追加される github.com 2. config.appproviders に追記する

    'providers' => [
        // ...
        Collective\Html\HtmlServiceProvider::class,
        // ...
      ],
  1. config.appaliases にクラス名を定義する
    'aliases' => [
      // ...,
      'Form' => Collective\Html\FormFacade::class,
      'Html' => Collective\Html\HtmlFacade::class,
      // ...,
    ],