laravel中facade的实现原理
金蝶云社区-allen
allen
6人赞赏了该文章 485次浏览 未经作者许可,禁止转载编辑于2018年07月08日 20:28:25

基本原理:facade提供了一个访问服务容器中对应类实例的方法的简单入口,本篇以Validator进行说明


使用方法:

在需要用到的php文件开头引入相应的facade

use Validator;

使用facade时类似如下的形式:

$validator   = Validator::make($form,$validField);

facade实现原理:

相应的具体的facade都放在命名空间Illuminate\Support\Facades下

如Validator的内容如下:

tupian1.png

这里Validator只需要实现方法getFacadeAccessor,该方法只需要返回该facade对应的服务容器中相应的接口名或其别名

当调用facade的方法,如Validator::make,这里调用Validator的facade方法时,由于Validator中没有相应方法,所以会调用Validator继承的Facade类中的方法__callStatic,

tupian2.png

这里的$instance = static::getFacadeRoot();调用的方法如下:

tupian3.png

很明显,这里的方法static::getFacadeAccessor()就是我们在具体的facade Validator中唯一实现的方法,通过该方法返回的接口的名字,再调用方法static::resolveFacadeInstance从服务容器中解析出相应实现的实例,然后回到__callStatic方法,将该实例赋值给

$instance,然后调用该实例的相应方法


赞 6