なんとなくつかっていたファサードについて少し調べた
普段業務のなかでなんとなく理解していることが多いなと感じたので、 自分のメモとしてなんとなく理解していることをちょこちょこ書いていきます。
ファサードとは
フレームワークの機能を簡単に利用できるもの
例)Config の例
Config::get('app.debug')
がコールされるConfigの実体である
Illuminate\Support\Facades\Config
クラスの getメソッド を呼び出す(config/app.php のaliases
にクラス名が定義されている)Illuminate\Support\Facades\Config
クラス には getメソッド がないため、スーパークラスの__callStatic
メソッドを呼び出す(スーパークラス = 継承元のクラス:Illuminate/Support/Facades/Facade
)__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ファサードをつかうには
- パッケージをインストール
$ composer require laravelcollective/html
インストールすると、composer.json
に laravelcollective/html
が追加される
github.com
2. config.app
の providers
に追記する
'providers' => [ // ... Collective\Html\HtmlServiceProvider::class, // ... ],
config.app
のaliases
にクラス名を定義する
'aliases' => [ // ..., 'Form' => Collective\Html\FormFacade::class, 'Html' => Collective\Html\HtmlFacade::class, // ..., ],