tohokuaikiのチラシの裏

技術的ネタとか。

LaravelのFacadeがどうやってメソッドを決定しているかコード読んだのでメモ

例えばAuthの場合。

Auth::guest()のメソッドはどのインスタンスが作られるのか?

  1. Authクラスは直接的には、Illuminate/Support/Facades/Auth.php のStaticメソッドがコールされる。
  2. Authクラスは、getFacadeAccessor() return 'auth'; のみだが、このauthは Illuminate/Foundation/Application.php のregisterCoreContainerAliases()により、'Illuminate\Auth\AuthManager'に結び付けられている。
  3. AuthManagerは、create***Driver()がコールされる。このメソッドでドライバが作られる。このドライバはGuardクラスのObjectを返す
  4. この場合、***の部分は、AuthManager->getDefaultDriver()で取得でき、この値は、applicationのconfig/auth.phpで設定される。EloquentはLaravelのデフォルトORM
  5. Illuminate/Auth/Guard.phpインスタンスのメソッドがFacadeで実行されるメソッドである。
Illuminate\Support\Facades\Auth 
Illuminate\Support\Facades\Facade 
Illuminate\Auth\AuthManager
Illuminate\Auth\Guard

んー、つか。これGuardクラスが完全に外部になっているのか。

DatabaseとEloquentと2個あって、それぞれがUserテーブルに対する実装になっていてこれはサンプルとしてなかなか参考になりそう。