Facades
Facades provide a "static" interface to classes that are available in the application's service container. Laravel ships with many facades, and you have probably been using them without even knowing it! Laravel "facades" serve as "static proxies" to underlying classes in the service container, providing the benefit of a terse, expressive syntax while maintaining more testability and flexibility than traditional static methods.
A facade class only needs to implement a single method: getFacadeAccessor
. It's the getFacadeAccessor
method's job to define what to resolve from the container. The Facade
base class makes use of the __callStatic()
magic-method to defer calls from your facade to the resolved object.
In the example below, a call is made to the Laravel cache system. By glancing at this code, one might assume that the static method get
is being called on the Cache
class:
If we look at that Illuminate\Support\Facades\Cache
class, you'll see that there is no static method get
:
class Cache extends Facade
{
/**
*
* @return string
protected static function getFacadeAccessor() { return 'cache'; }
Instead, the Cache
facade extends the base Facade
class and defines the method getFacadeAccessor()
. Remember, this method's job is to return the name of a service container binding. When a user references any static method on the Cache
facade, Laravel resolves the cache
binding from the service container and runs the requested method (in this case, get
) against that object.
Below you will find every facade and its underlying class. This is a useful tool for quickly digging into the API documentation for a given facade root. The key is also included where applicable.