I am finding it a bit difficult to understand Facades. Particularly how to find the underlying class name/location from a facade name. I have gone through the documentation but still not clear. For example, when using Auth::login()
, i found that there is no login()
method in the Auth facade.
class Auth extends Facade
{
/**
* Get the registered name of the component.
*
* @return string
*/
protected static function getFacadeAccessor()
{
return 'auth';
}
/**
* Register the typical authentication routes for an application.
*
* @return void
*/
public static function routes()
{
static::$app->make('router')->auth();
}
}
The Auth facades getFacadeAccessor()
method returns a string auth. But to which auth
class should i be looking at? How to resolve the actual class?
Thanks,
Somewhere in a Serviceprovider the
auth
key is registered to something. For theauth
key that's invendor/laravel/frameworksrc/Illuminate/Auth/AuthServiceProvider.php
. You can see that in theregisterAuthenticator()
method, theauth
key is registered to theIlluminate\Auth\AuthManager
with a singleton pattern.The container has several ways to bind a key to a specific class. methods like
bind
andsingleton
for example. Facades are just an extra class to call the main class statically from the root namespace.If you want to check out which class is used, you can use the following code:
get_class(resolve('auth'))
. Ofcourse, you can replace auth with any string you want to check.Bonus: I think you can override this behaviour by registering your own manager in some kind of way. I would advise you to extend the normal
AuthManager
and overwrite the methods that you want to see changed.