首页 > 其他 > 详细

laravel Facade

时间:2019-11-22 18:13:01      阅读:89      评论:0      收藏:0      [点我收藏+]

Facade的调用原理和过程

创建一个类  CacheManager.php(默认所有组件都在同一目录下)

创建一个provider  CacheServiceProvider

class CacheServiceProvider extends ServiceProvider
{
    public function register()
{
    $this->app->singleton(‘cache‘,function($app){
       return new CacheManager($app);
});
}
}  

服务容器($this->app)在服务提供者(ServiceProvider)内绑定服务(CacheManager)

singleton将类绑定到容器中

 

在config/app.php中注册服务提供者

‘providers‘ => [
        /*
         * Laravel Framework Service Providers...
         */
 ‘Illuminate\Cache\CacheServiceProvider‘,
]    

 

创建facades,调用容器方法

class Cache extends Facade
{
    protected static function getFacadeAccessor()
    {
       return ‘cache‘;
    }
}

 

基类Facade

所有门脸类都是继承自Facade类,再该基类中定义了一个__callStatic方法,以至于我们可以轻松的使用facade

 public static function __callStatic($method, $args)
    {
        $instance = static::getFacadeRoot();

        if (! $instance) {
            throw new RuntimeException(‘A facade root has not been set.‘);
        }

        return $instance->$method(...$args);
    }
 public static function getFacadeRoot()
    {
        return static::resolveFacadeInstance(static::getFacadeAccessor());
    }

getFacadeRoot方法将根据getFacadeAccessor()的返回值,从容器中取出对应的实例对象。

 protected static function resolveFacadeInstance($name)
    {
        if (is_object($name)) {
            return $name;
        }

        if (isset(static::$resolvedInstance[$name])) {
            return static::$resolvedInstance[$name];
        }

        return static::$resolvedInstance[$name] = static::$app[$name];
    }

 

 

 

 

laravel Facade

原文:https://www.cnblogs.com/xiajiaw/p/11913026.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!