Laravel框架 - Facade门面

2023-09-18 10:08:38

1 、官方文档给出的定义

“Facades 为应用的 服务容器 提供了一个「静态接口。Laravel 自带了很多 Facades,可以访问绝大部分功能。Laravel Facades 实际是服务容器中底层类的 「静态代理」 ,相对于传统静态方法,在使用时能够提供更加灵活、更加易于测试、更加优雅的语法。”

如何使用Facades?

2 、Facade 简化调用的例子

我们使用一个 Laravel 中的例子,来说明一下 Facade 是如何简化调用的。我们需要调用设置数据缓存的方法,使用 Facade 的语法如下:

#所有的 Laravel Facades 都定义在 Illuminate\Support\Facades 命名空间下。
#所以,我们可以轻松的使用 Facade :

use Illuminate\Support\Facades\Cache;
Route::get('/cache', function() {

    // 事先保证执行下面的put方法,将缓存存入
    // Cache::put('key', 'HelloKang', 10);

    // 获取缓存项key的内容
    return Cache::get('key');
}

如果不使用 Facade 来调用,那么调用的语法如下:

Route::get('/cache', function() {   
    // 获取缓存项key的内容
    return app('cache')->get('key');
}

语法过程就是先从服务容器中解析出来缓存对象,再利用缓存对象将缓存项提取。

对比这两种使用方式,第一种显而易见,更加直观,简单一些。这就是 Facade 的主要目的。

3 、其它

Facade的更通用的用法是省略前缀Illuminate\Support\Facades,直接use Cache进来,或者直接在代码中以\Cache::get()的方式调用,因为在配置目录config目录下的app.php文件中 aliases 已经为我们导入了类别名。

'aliases' => [
        'App' => Illuminate\Support\Facades\App::class,
        'Artisan' => Illuminate\Support\Facades\Artisan::class,
        'Auth' => Illuminate\Support\Facades\Auth::class,
        'Blade' => Illuminate\Support\Facades\Blade::class,
        'Broadcast' => Illuminate\Support\Facades\Broadcast::class,
        'Bus' => Illuminate\Support\Facades\Bus::class,
        'Cache' => Illuminate\Support\Facades\Cache::class,
        'Config' => Illuminate\Support\Facades\Config::class,
        'Cookie' => Illuminate\Support\Facades\Cookie::class,
        'Crypt' => Illuminate\Support\Facades\Crypt::class,
        'DB' => Illuminate\Support\Facades\DB::class,
        'Eloquent' => Illuminate\Database\Eloquent\Model::class,
        'Event' => Illuminate\Support\Facades\Event::class,
        'File' => Illuminate\Support\Facades\File::class,
        'Gate' => Illuminate\Support\Facades\Gate::class,
        'Hash' => Illuminate\Support\Facades\Hash::class,
        'Lang' => Illuminate\Support\Facades\Lang::class,
        'Log' => Illuminate\Support\Facades\Log::class,
        'Mail' => Illuminate\Support\Facades\Mail::class,
        'Notification' => Illuminate\Support\Facades\Notification::class,
        'Password' => Illuminate\Support\Facades\Password::class,
        'Queue' => Illuminate\Support\Facades\Queue::class,
        'Redirect' => Illuminate\Support\Facades\Redirect::class,
        'Redis' => Illuminate\Support\Facades\Redis::class,
        'Request' => Illuminate\Support\Facades\Request::class,
        'Response' => Illuminate\Support\Facades\Response::class,
        'Route' => Illuminate\Support\Facades\Route::class,
        'Schema' => Illuminate\Support\Facades\Schema::class,
        'Session' => Illuminate\Support\Facades\Session::class,
        'Storage' => Illuminate\Support\Facades\Storage::class,
        'URL' => Illuminate\Support\Facades\URL::class,
        'Validator' => Illuminate\Support\Facades\Validator::class,
        'View' => Illuminate\Support\Facades\View::class,
        'Excel' => Maatwebsite\Excel\Facades\Excel::class,
        'Input' => Illuminate\Support\Facades\Input::class,
        'EasyWeChat' => Overtrue\LaravelWeChat\Facade::class,
        'Image' => Intervention\Image\Facades\Image::class,
        'QrCode' => SimpleSoftwareIO\QrCode\Facades\QrCode::class,
    ],

总结:

Facade,就是访问服务方法的快捷语法,不同我们从服务容器中手动解析,直接调用封装好的 Facade 即可完成任务。

看到这里就明白了,缓存Facade,Cache类的实现只是告诉服务容器,我需要的服务名字叫“cache”,你把之前绑定的类实例化后返回给我用。至于“cache”服务是何时绑定到容器中的,这就涉及框架的启动过程以及容器类的内部实现了。

 

更多推荐

Day66|图part5:130. 被围绕的区域、827.最大人工岛

130.被围绕的区域leetcode链接:题目链接这题看起来很复杂,其实跟之前找飞地和找边缘地区的是差不多的,主要分三步:使用dfs将边缘的岛都找出来,然后用A代替防止混淆;再用dfs找中间不与任何岛相连的飞地;最后把之前的A替换成O。最终代码:classSolution{public:voiddfs(vector<v

ChatGPT 或其它 AI,能用在文书创作上吗?

新的申请季已经正式开始,一些热门项目的ED截止日期也不再遥远,因此很多准留学生们都已经开始了关于文书的创作。而随着科技的不断发展,以ChatGPT为首的一众AI工具也作为一种辅助手段愈发融入了我们的生活。那么不免就会有一些同学在准备申请时“动起了歪脑筋”,如果选择用ChatGPT来帮自己写文书的话,岂不是又省事又省力还

6.2 Sunday搜索内存特征

Sunday算法是一种字符串搜索算法,由DanielM.Sunday于1990年开发,该算法用于在较长的字符串中查找子字符串的位置。算法通过将要搜索的模式的字符与要搜索的字符串的字符进行比较,从模式的最左侧位置开始。如果发现不匹配,则算法将模式向右滑动一定数量的位置。这个数字是由当前文本中当前模式位置的最右侧字符确定的

Vue模板语法【下】事件处理器,表单、自定义组件、通信组件

目录一、事件处理器1.1常用的事件修饰符1.2常用的按键修饰符二,vue中的表单三、自定义组件四,通信组件一、事件处理器1.1常用的事件修饰符Vue的事件修饰符是用来改变事件的默认行为或者添加额外的功能。以下是一些常用的事件修饰符及其作用:.stop:阻止事件冒泡,相当于调用event.stopPropagation(

IntelliJ IDEA使用——Debug操作

文章目录版本说明图标和快捷键查看变量计算表达式条件断点多线程调试版本说明当前的IntelliJIDEA的版本是2021.2.2(下载IntelliJIDEA)ps:不同版本一些图标和设置位置可能会存在差异,但应该大部分都差不多。图标和快捷键图标快捷键说明Ctrl+F8打断点,在需要的代码行进行断点测试Alt+F10定位

Vue|项目结构与执行过程介绍

一、项目文件1.1目录结构1.2结构介绍二、执行过程2.1main.js2.2App.vue2.3index.html三、生命周期3.1周期阶段3.2Vue实例的产生过程3.3钩子函数用途一、项目文件1.1目录结构1.2结构介绍文件结构文件介绍node_modules第三方包文件夹public放html文件的地方fav

微信小程序商城怎么弄

微信小程序商城怎么弄?这是一个常见的问题,对于那些想要在微信上创建一个自己的商城的人来说。下面为您介绍一些基本的步骤和注意事项,帮助您轻松地创建一个微信小程序商城。首先,要创建一个微信小程序商城,您需要注册一个微信小程序账号并开通商户号。具体步骤如下:打开微信公众平台,点击右上角的“立即注册”,选择小程序账号,并按照提

【lesson8】gdb的介绍及使用

文章目录gdb的介绍什么是gdb?背景认识gdb的使用gcc/g++程序文件名-o将来生成的可执行程序名-ggdb调试命令gdb可执行程序名quitlistl0Enterr(run)b(breakpoint)+n(行号)infobd(delete)+断点编号n(next)p(printf)+变量名s(step)btfi

Python中的文件I/O操作:常见问题与解决方案

目录常见问题代码示例文件路径问题:文件权限问题:文件编码问题:文件读写模式问题:文件未关闭问题:大文件处理问题:文件读写过程中的异常处理问题:文件内容格式问题:跨平台换行符问题:二进制文件处理问题:总结在Python编程中,文件I/O操作是常见的任务之一。无论是读取文件内容、写入新数据还是追加信息,文件I/O操作都是不

客观题:Android基础【基础题】

一.单选题(共6题,60分)1.(单选题,10分)Android四层架构中,应用框架层使用的是什么语法?A.JavaB.AndroidC.CD.C++正确答案:AAndroid四层架构通常指的是Android应用的四个关键组件,包括:应用层(ApplicationLayer):这是最顶层的层次,包括用户界面(UI)和应

GaussDB技术解读系列:数据库迁移创新实践

近日,以“数智赋能共筑未来”为主题的第14届中国数据库技术大会(DTCC2023)在北京举行,在GaussDB“五高两易”核心技术,给世界一个更优选择的专场,华为云数据库生态工具研发总监窦德明分享了GaussDB数据库的迁移创新实践。本篇将分享GaussDB数据库迁移的创新实践。易迁移能力是企业数据库替换选型的关键考量

热文推荐