laravel 学习指南 第六章 第五节
- TOC
 {:toc}
6.5 门面
6.5.1 简介
Facades为应用在服务容器中的绑定类,提供一个静态接口。
Laravel附带许多facades,你可以在不知道的情况下正在使用它们。
Laravel的门面作为服务容器中底层类的静态代理,相比于传统静态方法,在维护时能够提供更加易于测试,简明的语法。
6.5.2 使用门面
在Laravel应用的上下文中,门面是一个提供访问容器中对象的类。该机制原理由Facade类实现,Laravel自带的门面,以及创建的自定义门面,都会继承自Illuminate\Support\Facades\Facade基类。
门面类只需要实现一个方法:getFacadeAccessor。getFacadeAccessor 方法定义了从容器中解析什么,然后 Facade 基类使用魔术方法 __callStatic() 从你的门面中调用解析对象。
下面的例子中,将会调用Laravel的缓存系统,浏览代码后,也许你会觉得我们调用了Cache的静态方法get:
| 1 | 
 | 
注意我们在顶部位置引入Cache门面。该门面作为代理访问底层Illuminate\Contracts\Cache\Factory接口的实现方法。我们对门面的所有调用都会被传递给Laravel缓存服务的底层实例。
如果我们查看Illuminate\Support\Facades\Cache类的源码,将会发现其中并没有静态方法get:
| 1 | class Cache extends Facade{ | 
Cache门面继承Facade基类并定义了getFacadeAccessor方法,该方法的工作就是返回服务容器绑定类的别名,当用户引用Cache类的任何静态方法时,Laravel从服务容器中解析Cache绑定,然后在解析出的对象上调用所有请求方法(本例中是get)。
6.5.3 门面类列表
下面列出了每个门面及其对应的底层类,这对深入给定门面的API文档而言是个很有用的工具。服务容器绑定键也被包含进来: