laravel中facade的实现原理
6人赞赏了该文章
600次浏览
编辑于2018年07月08日 20:28:25
基本原理:facade提供了一个访问服务容器中对应类实例的方法的简单入口,本篇以Validator进行说明
使用方法:
在需要用到的php文件开头引入相应的facade
use Validator;
使用facade时类似如下的形式:
$validator = Validator::make($form,$validField);
facade实现原理:
相应的具体的facade都放在命名空间Illuminate\Support\Facades下
如Validator的内容如下:
这里Validator只需要实现方法getFacadeAccessor,该方法只需要返回该facade对应的服务容器中相应的接口名或其别名
当调用facade的方法,如Validator::make,这里调用Validator的facade方法时,由于Validator中没有相应方法,所以会调用Validator继承的Facade类中的方法__callStatic,
这里的$instance = static::getFacadeRoot();调用的方法如下:
很明显,这里的方法static::getFacadeAccessor()就是我们在具体的facade Validator中唯一实现的方法,通过该方法返回的接口的名字,再调用方法static::resolveFacadeInstance从服务容器中解析出相应实现的实例,然后回到__callStatic方法,将该实例赋值给
$instance,然后调用该实例的相应方法
赞 6
6人点赞
还没有人点赞,快来当第一个点赞的人吧!
打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!
推荐阅读