码迷,mamicode.com
首页 > 其他好文 > 详细

laravel门面与服务提供者区别

时间:2019-11-04 15:58:20      阅读:102      评论:0      收藏:0      [点我收藏+]

标签:director   mic   定义   efi   system   alt   path   service   false   

laravel门面模式与服务提供者区别

以 Laravel 自带的文件系统为例,在 config/app.php 的配置文件的 providers 数组中,注册了一个服务提供者:

Illuminate\Filesystem\FilesystemServiceProvider::class,

 

   

在 alias 数组中定义了一个门面:

‘File’ => Illuminate\Support\Facades\File::class,

 

   

通过这两个步骤,我们就可以非常方便的使用 Laravel 提供的文件系统相关的操作,而且调用形式很简洁,如:

File::exist ($path),判断文件是否存在。

File::get ($path, $lock = false),获取一个文件的内容。

File::append ($path, $data),把内容追加到一个文件末尾。

File::files ($directory),获取一个目录下所有文件。

 

   

那么这是如何做到的呢?下面分别讲一讲 Laravel 的服务提供者和门面模式。

服务提供者

先看看定义:

服务提供者是所有 Laravel 应用程序启动的中心所在。包括你自己的应用程序,以及所有的 Laravel 核心服务,都是通过服务提供者启动的。

在文件系统这个服务提供者中,位置/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemServiceProvider.php,register 方法可以看到绑定了一个单例:

protected function registerNativeFilesystem()

{

    $this->app->singleton(‘files‘, function () {

        return new Filesystem;

    });

}

 

   

这个单例是 Filesystem 这个类的单例模式。当然,这个服务提供者中也可以绑定其他的单例,或做更多的事情。我们这里只研究 File::exist () 这种调用方式的原理。

那么这样一来就有个 files 的单例,实际上是 Filesystem 这个类的实例。

此时,如果没有 Facade,也是可以调用到 Filesystem 这个实例的方法的,那就是这样调用:

app(‘files’)->exist($path)

 

   

技术图片技术图片技术图片

链接:https://pan.baidu.com/s/1v5gm7n0L7TGyejCmQrMh2g 提取码:x2p5

免费分享,但是X度限制严重,如若链接失效点击链接或搜索加群 群号518475424

好了,现在开始讲 Facade.

Facade 门面模式

先看下简介:

Facades /f??säd/ 为应用程序的服务容器中可用的类提供了一个「静态」接口。Laravel 自带了许多的 facades,可以用来访问其几乎所有的服务。Laravel facades 就是服务容器里那些基类的「静态代理」,相比于传统的静态方法调用,facades 在提供更简洁且丰富的语法的同时,还有更好的可测试性和扩展性。

本文一开始讲到 alias 数组定义了一个 File,具体的类是

Illuminate\Support\Facades\File::class,

 

   

它的内容是:

class File extends Facade

{

    /**

     * Get the registered name of the component.

     *

     * @return string

     */

    protected static function getFacadeAccessor()

    {

        return ‘files‘;

    }

}

 

   

它实际上返回了一个名称,注意这个名称 files,不就是刚刚绑定的单例模式的名称吗?没错。

这样一来,就可以使用 File 这个别名或者说门面,来调用这个 Filesystem 实例中的方法了。

通过本文,希望大家能够了解服务提供者,Facade,和实际调用的类的实例之间的关系。

laravel门面与服务提供者区别

标签:director   mic   定义   efi   system   alt   path   service   false   

原文地址:https://www.cnblogs.com/it-3327/p/11743564.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!