门面为应用服务容器中的绑定类提供了一个“静态”接口。Laravel 内置了很多门面,你可能在不知道的情况下正在使用它们。Laravel 的门面作为服务容器中底层类的“静态代理”,相比于传统静态方法,在维护时能够提供更加易于测试、更加灵活、简明优雅的语法。所谓门面就是 Facade 类利用了 __callStatic() 魔术方法来延迟调用容器中的对象的方法

接下来使用 Laravel 编写一个自定义门面


首先创建一个需要绑定到服务容器的 TokenManageService 类

declare(strict_types=0);

/**
* app/Services/TokenMangeService.php
*
*/
namespace App\Services; /**
* Token管理服务
*
* Class TokenManageService
* @package App\Services
*/
class TokenManageService
{
/**
* 定义token属性
*
* @var
*/
public $token; /**
* 定义token属性
*
* @param $token
* @return mixed
*/
public function getToken($token)
{
return $this->token = $token;
}
}

创建一个静态指向 TokenManage 类的门面类 TokenManageFacade

declare(strict_types=0);

/**
* app/Facades/TokenManageFacade.php
*
*/
namespace App\Facades; use Illuminate\Support\Facades\Facade; /**
* Class TokenManageFacade
* @package App\Facades
*/
class TokenManageFacade extends Facade
{
/**
* Get the registered name of the component.
*
* @return string
*/
protected static function getFacadeAccessor()
{
return 'token.manage';
}
}

在服务提供者中绑定 TokenManageService 类到服务容器

declare(strict_types=0);

/**
* app/Providers/TokenManageServiceProvider.php
*
*/
namespace App\Providers; use App\Services\TokenManageService; use Illuminate\Support\ServiceProvider; /**
* token管理服务提供者
*
* Class TokenManageServiceProvider
* @package App\Providers
*/
class TokenManageServiceProvider extends ServiceProvider
{ /**
* Define your route model bindings, pattern filters, etc.
*
* @return void
*/
public function boot()
{
} /**
* Register the application services.
*
* @return void
*/
public function register()
{
$this->app->singleton('token.manage', function ($app) {
return new TokenManageService();
});
}
}

修改配置文件 config/app.php

return [
'providers' => [
...
/**
* 自定义
*/
App\Providers\TokenManageServiceProvider::class
],
'aliases' => [
...
/**
* 自定义
*/
'TokenManage' => \App\Facades\TokenManageFacade::class
],
]

接下来就可以测试了

declare(strict_types=0);

/**
* TestController.php.
*
*/
namespace App\Http\Controllers\Test; use TokenManage; /**
* Class TestController
* @package App\Http\Controllers\Test
*/
class TestController extends Controller
{
/**
* 测试自定义门面
*/
public function testFacade()
{
$res = TokenManage::getToken('Hello World');
dd($res);
}
}

Response

Class 'TokenManage' Not Found
  • 1
  • WTF,当时心里一万只草泥马奔腾着,why…why…why…

  • 没办法啦,只能定位问题了,默默地找了定位了半个多小时,终于发现了问题所在,原来是 Laravel 的配置文件有缓存没有更新到。

php artisan config:cache
  • 1

重新测试一下,果然成功了。

Response

'Hello World'

Laravel5 创建自定义门面(Facade)的更多相关文章

  1. Laravel开发:Laravel框架门面Facade源码分析

    前言 这篇文章我们开始讲 laravel 框架中的门面 Facade,什么是门面呢?官方文档: Facades(读音:/fəˈsäd/ )为应用程序的服务容器中可用的类提供了一个「静态」接口.Lara ...

  2. 谈谈thinkphp5.1中容器(Container)和门面(Facade)的实现

    tp5.1中引入了容器(Container)和门面(Facade)这两个新的类 官方文档已经给出了定义: 容器(Container)实现类的统一管理,确保对象实例的唯一性. 门面(Facade)为容器 ...

  3. laravel5.2总结--门面(facades)

    Facades 为应用程序的服务容器中可用的类提供了一个「静态」接口.   Laravel 本身附带许多的 facades,甚至你可能在不知情的状况下已经在使用他们!   xpower的静态接口(门面 ...

  4. 5.1中容器(Container)和门面(Facade)的实现

    tp5.1中引入了容器(Container)和门面(Facade)这两个新的类 官方文档已经给出了定义: 容器(Container)实现类的统一管理,确保对象实例的唯一性. 门面(Facade)为容器 ...

  5. ASP.NET MVC随想录——创建自定义的Middleware中间件

    经过前2篇文章的介绍,相信大家已经对OWIN和Katana有了基本的了解,那么这篇文章我将继续OWIN和Katana之旅——创建自定义的Middleware中间件. 何为Middleware中间件 M ...

  6. 带你走近AngularJS - 创建自定义指令

    带你走近AngularJS系列: 带你走近AngularJS - 基本功能介绍 带你走近AngularJS - 体验指令实例 带你走近AngularJS - 创建自定义指令 ------------- ...

  7. [转]maven创建自定义的archetype

    创建自己的archetype一般有两种方式,比较简单的就是create from project 1.首先使用eclipse创建一个新的maven project,然后把配置好的一些公用的东西放到相应 ...

  8. ArcGIS Engine环境下创建自定义的ArcToolbox Geoprocessing工具

    在上一篇日志中介绍了自己通过几何的方法合并断开的线要素的ArcGIS插件式的应用程序.但是后来考虑到插件式的程序的配置和使用比较繁琐,也没有比较好的错误处理机制,于是我就把之前的程序封装成一个类似于A ...

  9. Dockerfile创建自定义Docker镜像以及CMD与ENTRYPOINT指令的比较

    1.概述 创建Docker镜像的方式有三种 docker commit命令:由容器生成镜像: Dockerfile文件+docker build命令: 从本地文件系统导入:OpenVZ的模板. 关于这 ...

随机推荐

  1. python list和tuple

    list列表简介:列表是python的基础数据类型之⼀ ,其他编程语⾔也有类似的数据类型. 比如JS中的数组, java中的数组等等. 它是以[ ]括起来, 每个元素⽤' , '隔开⽽且可以存放各种数 ...

  2. Optimizing Hive queries for ORC formatted tables

    Short Description: Hive configuration settings to optimize your HiveQL when querying ORC formatted t ...

  3. java语言的特征

    运行时:反射与内省+派发机制: 额外的多态支持:注解: 语法改进:内部类与匿名类.匿名函数: 线程支持改进: 类加载机制? aop的支持: bean?

  4. centos7下kubernetes(6。运行应用)

    Deployment 从一个例子开始 kubectl run nginx-deployment --image=nginx:1.7.9 --replicas=2 kubectl get deploym ...

  5. centos7下安装docker(23.docker-swarm之如何访问service)

    如何访问service呢? 为了便于分析,我们重新部署web-server 1.删除service 执行命令docker service rm web-server docker service rm ...

  6. HTTP协议中GET和POST的区别(详细描述)

    HTTP协议在现代网络通信中被广泛应用,在HTTP 1.0版本中有7种请求方式,在HTTP 1.1版本中有8种请求方式,而这些请求方式中最常用的就是GET和POST,网上关于GET与POST请求方式的 ...

  7. 转://oracle deadlock死锁trace file分析之一

    ---oracle versionSQL> select * from v$version where rownum=1;BANNER------------------------------ ...

  8. day2-安装python以及基本使用

    安装Python windows 1.下载安装包 https://www.python.org/downloads/ 2.安装 默认安装路径:C:\python27 3.配置环境变量 [右键计算机]- ...

  9. Java NIO1:浅谈I/O模型

    一.什么是同步?什么是异步? 同步和异步的概念出来已经很久了,网上有关同步和异步的说法也有很多.以下是我个人的理解: 同步就是:如果有多个任务或者事件要发生,这些任务或者事件必须逐个地进行,一个事件或 ...

  10. 还是要习惯在linux环境下作Java开发

    要FQ 怎么在ubuntu上安装jdk 网址: https://www.youtube.com/watch?v=NZB3Iy7Lve4 需要网站:http://p.web.umkc.edu/pv6xc ...