laravel门面有什么用

发布时间 - 2022-02-15 00:00:00    点击率:
在laravel中,门面Facades用于为应用的IoC服务容器的类提供了一个静态的接口,Laravel的门面作为服务容器中底层类的静态代理,相比于传统静态方法,在维护时能够提供更加易于测试的语法。

本教程操作环境:windows10系统、Laravel6版,DELL G3电脑。

laravel门面有什么用

介绍

Facades 为应用的 IoC 服务容器 的类提供了一个静态的接口。Laravel 里面自带了一些 Facades,如Cache等。Laravel 的门面作为服务容器中底层类的“静态代理”,相比于传统静态方法,在维护时能够提供更加易于测试、更加灵活、简明优雅的语法。

解释

在 Laravel 应用这个上下文里面,一个 Facade 就是一个类,使用这个类可以访问到来自容器里的一个对象,这个功能就是在 Facade 类里面定义的。Laravel 的 Facades 还有任何你自己定义的 Facades,都会去继承 Facade 这个类。

你的 Facade 类只需要实施一个的方法:getFacadeAccessor。要在容器里 resolve 什么出来,都是在这个方法里去做的。Facade 这个基类里面使用了__callStatic() 魔术方法,可以延迟到 resolved 对象上的,来自 Facade 的调用。

所以,当你使用 Facade 调用的时候,比如像这样:Cache:get,laravel 会从 Ioc 服务容器 里面 resolves 缓存管理类,然后再去调用这个类上面的 get 方法。Laravel 的 Facades 可以去定位服务,它是一种使用 Laravel 的 Ioc 服务容器 的更方便的语法。

优点

Facade 有诸多优点,其提供了简单、易记的语法,让我们无需记住长长的类名即可使用 Laravel 提供的功能特性,此外,由于他们对 PHP 动态方法的独到用法,使得它们很容易测试。

实际使用

下面的例子,去调用了一下 Laravel 的缓存系统。先看一下下面这行代码,你可能会觉得,这是直接去调用 Cache 这个类上面的一个叫 get 的静态的方法。

$value = Cache::get('key');

不过,如果你查看 Illuminate\Support\Facades\Cache 这个类,你会发现这里根本就没有 get 这个静态方法:

class Cache extends Facade {
    /**
     * Get the registered name of the component.
     *
     * @return string
     */
    protected static function getFacadeAccessor() { return 'cache'; }
}

Cache 这个类继承了 Facade 这个基类,它里面定义了一个叫 getFacadeAccessor() 的方法。注意,这个方法的干的事就是去返回一个 Ioc 绑定的名字,这里就是 cache。

当用户在引用任何在 Cache 这个 Facade 上的静态方法的时候,Laravel 就会从 Ioc 服务容器 里面去 resolves cache 这个绑定,并且会去执行在对象上的这个所请求的方法(这里就是 get 这个方法)。

所以,我们在调用 Cache::get 的时候,它的真正的意思是这样的:

$value = $app->make('cache')->get('key');

导入 Facades

注意,在使用 facade 的时候,如果控制器里面用到了命名空间,你需要把 Facade 类导入到这个命名空间里。所有的 Facades 都是在全局命名空间下:

创建 Facades

创建 Facade 只需要三个东西:

  • 一个 IoC 绑定。

  • 一个 Facade 类。

  • 一个 Facade 别名的配置。

在下面我们定义了一个类:PaymentGateway\Payment 。

namespace PaymentGateway;
class Payment {
    public function process()
    {
        //
    }
}

我们需要能在 Ioc 服务容器 里面去 resolve 这个类。所以,先要去添加一个 Service Provider 绑定:

App::bind('payment', function()
{
    return new \PaymentGateway\Payment;
});

去注册这个绑定最好的方法就是去创建一个新的 Service Provider ,把它命名为 PaymentServiceProvider ,然后把它绑定到 register 方法上。再去配置 laravel 在 config/app.php 这个配置文件里加载你的 Service Provider。

下一步就是去创建自己的 Facade 类:

use Illuminate\Support\Facades\Facade;
class Payment extends Facade {
    protected static function getFacadeAccessor() {
             return 'payment'; 
    }
}

最后,如果你愿意,可以去给 Facade 添加一个别名,放到 config/app.php 配置文件里的 aliases 数组里。

可以去调用 Payment 类的一个实例上的 process 这个方法了。像这样:

Payment::process();

【相关推荐:laravel视频教程】


# laravel  # php  # 命名空间  # register  # 继承  # 接口  # 对象  # 绑定  # 如果你  # 把它  # 只需要  # 再去  # 一个叫  # 会去  # 配置文件  # 自己的  # 都是 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 通义万相免费版怎么用_通义万相免费版使用方法详细指南【教程】  google浏览器怎么清理缓存_谷歌浏览器清除缓存加速详细步骤  如何自定义建站之星模板颜色并下载新样式?  移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?  成都网站制作公司哪家好,四川省职工服务网是做什么用?  作用域操作符会触发自动加载吗_php类自动加载机制与::调用【教程】  免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?  移动端脚本框架Hammer.js  Linux网络带宽限制_tc配置实践解析【教程】  如何在IIS服务器上快速部署高效网站?  Win10如何卸载预装Edge扩展_Win10卸载Edge扩展教程【方法】  佛山网站制作系统,佛山企业变更地址网上办理步骤?  Laravel怎么在Blade中安全地输出原始HTML内容  Laravel如何发送邮件_Laravel Mailables构建与发送邮件的简明教程  Laravel集合Collection怎么用_Laravel集合常用函数详解  html5的keygen标签为什么废弃_替代方案说明【解答】  Linux后台任务运行方法_nohup与&使用技巧【技巧】  Laravel如何监控和管理失败的队列任务_Laravel失败任务处理与监控  微信小程序 canvas开发实例及注意事项  Laravel如何为API生成Swagger或OpenAPI文档  大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?  猎豹浏览器开发者工具怎么打开 猎豹浏览器F12调试工具使用【前端必备】  JavaScript如何实现音频处理_Web Audio API如何工作?  BootStrap整体框架之基础布局组件  C++时间戳转换成日期时间的步骤和示例代码  高端网站建设与定制开发一站式解决方案 中企动力  如何快速启动建站代理加盟业务?  Laravel Seeder填充数据教程_Laravel模型工厂Factory使用  黑客如何利用漏洞与弱口令入侵网站服务器?  如何基于云服务器快速搭建个人网站?  高端建站三要素:定制模板、企业官网与响应式设计优化  如何用虚拟主机快速搭建网站?详细步骤解析  音乐网站服务器如何优化API响应速度?  网站制作大概多少钱一个,做一个平台网站大概多少钱?  Laravel如何发送系统通知_Laravel Notifications实现多渠道消息通知  详解Android图表 MPAndroidChart折线图  IOS倒计时设置UIButton标题title的抖动问题  韩国服务器如何优化跨境访问实现高效连接?  Laravel如何使用Gate和Policy进行权限控制_Laravel权限判定与策略规则配置  Laravel如何集成Inertia.js与Vue/React?(安装配置)  javascript基于原型链的继承及call和apply函数用法分析  Laravel用户认证怎么做_Laravel Breeze脚手架快速实现登录注册功能  Laravel如何生成URL和重定向?(路由助手函数)  如何为不同团队 ID 动态生成多个非值班状态按钮  laravel服务容器和依赖注入怎么理解_laravel服务容器与依赖注入解析  Laravel Vite是做什么的_Laravel前端资源打包工具Vite配置与使用  Laravel Livewire是什么_使用Laravel Livewire构建动态前端界面  如何实现javascript表单验证_正则表达式有哪些实用技巧  韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐  JS中对数组元素进行增删改移的方法总结