laravel门面的定义和优点是什么,怎样使用
Admin 2022-06-16 群英技术资讯 1270 次浏览
这篇文章主要介绍了laravel门面的定义和优点是什么,怎样使用相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇laravel门面的定义和优点是什么,怎样使用文章都会有所收获,下面我们一起来看看吧。在laravel中,门面Facades用于为应用的IoC服务容器的类提供了一个静态的接口,Laravel的门面作为服务容器中底层类的静态代理,相比于传统静态方法,在维护时能够提供更加易于测试的语法。

本教程操作环境:windows10系统、Laravel6版,DELL G3电脑。
介绍
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 都是在全局命名空间下:
<?php namespace App\Http\Controllers;
use Cache;
class PhotosController extends Controller {
/**
* Get all of the application photos.
*
* @return Response
*/
public function index()
{
$photos = Cache::get('photos');
//
}
}创建 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();
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
本篇文章小编给大家分享一下golang防缓存击穿singleflight代码实现方法,文章代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看。
我们知道PHP是属于弱类型语言,与Java和C++这些强类型语言不同,弱类型语言是自动转换数据类型的,强类型语言必须手动什么类型。那么PHP数据类型如何转换呢?有几种转换方法?下面我们一起来来了解一下。
这篇文章主要介绍了Thinkphp5.0 框架实现控制器向视图view赋值及视图view取值操作,结合实例形式分析了thinkPHP控制器向视图传值及从视图取值相关操作技巧,需要的朋友可以参考下
单例模式(Singleton)也叫单态模式,是设计模式中最为简单的一种模式,甚至有些模式大师都不称其为模式,称其为一种实现技巧,因为设计模式讲究对象之间的关系的抽象,而单例模式只有自己一个对象,也因此有些设计大师并把把其称为设计模式之一。
workerman统计在线人数的方法:定义一个全局变量保存当前进程客户端连接数,使用$connection判断是否有新用户,当有新用户连接时全局变量加一,然后设置一个定时器,在定时器中使用onClose判断是否有用户断开。
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
7x24小时售前:400-678-4567
7x24小时售后:0668-2555666
24小时QQ客服
群英微信公众号
CNNIC域名投诉举报处理平台
服务电话:010-58813000
服务邮箱:service@cnnic.cn
投诉与建议:0668-2555555
Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 ICP核准(ICP备案)粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008