旗下导航:搜·么
当前位置:网站首页 > PHP框架 > Laravel > 正文

laravel门面与效劳提供者区分【laravel框架】

作者:搜搜PHP网发布时间:2019-11-27分类:Laravel浏览:83


导读:laravel门面情势与效劳供应者区分以Laravel自带的文件体系为例,在config/app.php的配置文件的providers数组中,注册了一个效劳供应...

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)

好了,如今最先讲 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相干技术文章,请接见Laravel框架入门教程栏目举行进修!

以上就是laravel门面与效劳供应者区分的细致内容,更多请关注ki4网别的相干文章!

标签:laravel