前言
在laravel中,我们可能需要用到自己添加的类时,可以建立一个文件夹专门存放类文件,也可以使用laravel的服务提供者的方式来使用。
这两者其实区别不大,主要是前者使用的话,会跟业务代码产生依赖,想象一下,如果一个控制器之中引用了很多自定义的类文件的话,那么可以想像会产生多少依赖,所以我们可以使用服务提供者的方式,向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"htmlcode">
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,和实际调用的类的实例之间的关系。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对的支持。
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
P70系列延期,华为新旗舰将在下月发布
3月20日消息,近期博主@数码闲聊站 透露,原定三月份发布的华为新旗舰P70系列延期发布,预计4月份上市。
而博主@定焦数码 爆料,华为的P70系列在定位上已经超过了Mate60,成为了重要的旗舰系列之一。它肩负着重返影像领域顶尖的使命。那么这次P70会带来哪些令人惊艳的创新呢?
根据目前爆料的消息来看,华为P70系列将推出三个版本,其中P70和P70 Pro采用了三角形的摄像头模组设计,而P70 Art则采用了与上一代P60 Art相似的不规则形状设计。这样的外观是否好看见仁见智,但辨识度绝对拉满。
更新日志
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]