门面为应用服务容器中的绑定类提供了一个“静态”接口。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'

最新文章

  1. 3. Longest Substring Without Repeating Characters(c++) 15ms
  2. vc++ 中 IntelliSense: 无法打开 源 文件 "xxx.h"
  3. UVALive 6168 Fat Ninjas --二分小数+搜索
  4. n阶乘 尾数0的个数
  5. hdu 4858 项目管理 图的分块
  6. linux下,如何把整个文件夹上传到服务器(另一台linux)
  7. WinForm控件选择器
  8. 20151224jquery学习笔记---cookie插件
  9. jquery 关于event.target使用的几点说明介绍
  10. JAVA GUI学习 - 窗体背景图片设置方法:重写paintComponent(Graphics g)方法
  11. 201521123080《Java程序设计》第11周学习总结
  12. 26 , CSS 构造表单
  13. JavaSE 初学进度条JProgressBar
  14. 【CF711D】Directed Roads
  15. laravel请求到响应的生命周期
  16. 总结小bug
  17. eclipse及tomcat设置编码
  18. 单字节编码&双字节编码
  19. C#调用Excel宏
  20. 10.Spring——框架的AOP

热门文章

  1. 团队作业——UML设计
  2. WPFのDecorator 、Adorner和AdornerDecorator
  3. 理解 tf.Variable、tf.get_variable以及范围命名方法tf.variable_scope、tf.name_scope
  4. WPF中控件的显示与隐藏
  5. 【vue】vue +element 搭建项目,将js函数变成vue的函数
  6. Python框架学习之Flask中的Jinja2模板
  7. Python框架学习之用Flask创建一个简单项目
  8. MySQL 主主配置
  9. Hive学习之路 (一)Hive初识
  10. ASP.NET 管道