LaravelのFacadeがどうやってメソッドを決定しているかコード読んだのでメモ
例えばAuthの場合。
Auth::guest()のメソッドはどのインスタンスが作られるのか?
- Authクラスは直接的には、Illuminate/Support/Facades/Auth.php のStaticメソッドがコールされる。
- Authクラスは、getFacadeAccessor() return 'auth'; のみだが、このauthは Illuminate/Foundation/Application.php のregisterCoreContainerAliases()により、'Illuminate\Auth\AuthManager'に結び付けられている。
- AuthManagerは、create***Driver()がコールされる。このメソッドでドライバが作られる。このドライバはGuardクラスのObjectを返す
- この場合、***の部分は、AuthManager->getDefaultDriver()で取得でき、この値は、applicationのconfig/auth.phpで設定される。EloquentはLaravelのデフォルトORM
- Illuminate/Auth/Guard.phpのインスタンスのメソッドがFacadeで実行されるメソッドである。
Illuminate\Support\Facades\Auth Illuminate\Support\Facades\Facade Illuminate\Auth\AuthManager Illuminate\Auth\Guard
んー、つか。これGuardクラスが完全に外部になっているのか。
DatabaseとEloquentと2個あって、それぞれがUserテーブルに対する実装になっていてこれはサンプルとしてなかなか参考になりそう。