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文档而言是个很有用的工具。服务容器绑定键也被包含进来: