laravel门面的作用是什么

laravel门面的作用是什么

这篇文章主要为大家展示了“laravel门面的作用是什么”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“laravel门面的作用是什么”这篇文章吧。

在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 这个静态方法:

classCacheextendsFacade{/***Gettheregisterednameofthecomponent.**@returnstring*/protectedstaticfunctiongetFacadeAccessor(){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 都是在全局命名空间下:

<?phpnamespaceApp\Http\Controllers;useCache;classPhotosControllerextendsController{/***Getalloftheapplicationphotos.**@returnResponse*/publicfunctionindex(){$photos=Cache::get('photos');//}}

创建 Facades

创建 Facade 只需要三个东西:

  • 一个 IoC 绑定。

  • 一个 Facade 类。

  • 一个 Facade 别名的配置。

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

namespacePaymentGateway;classPayment{publicfunctionprocess(){//}}

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

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

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

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

useIlluminate\Support\Facades\Facade;classPaymentextendsFacade{protectedstaticfunctiongetFacadeAccessor(){return'payment';}}

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

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

Payment::process();

以上是“laravel门面的作用是什么”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注恰卡编程网行业资讯频道!

发布于 2022-02-15 20:42:29
收藏
分享
海报
0 条评论
33
上一篇:如何使用php Swoole实现毫秒定时计划任务 下一篇:tp5和laravel有哪些区别
目录

    0 条评论

    本站已关闭游客评论,请登录或者注册后再评论吧~

    忘记密码?

    图形验证码