Laravel5 创建自定义门面(Facade)
2024-08-24 21:46:03
门面为应用服务容器中的绑定类提供了一个“静态”接口。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
php artisan config:cache
- 1
重新测试一下,果然成功了。
Response
'Hello World'
最新文章
- 3. Longest Substring Without Repeating Characters(c++) 15ms
- vc++ 中 IntelliSense: 无法打开 源 文件 ";xxx.h";
- UVALive 6168 Fat Ninjas --二分小数+搜索
- n阶乘 尾数0的个数
- hdu 4858 项目管理 图的分块
- linux下,如何把整个文件夹上传到服务器(另一台linux)
- WinForm控件选择器
- 20151224jquery学习笔记---cookie插件
- jquery 关于event.target使用的几点说明介绍
- JAVA GUI学习 - 窗体背景图片设置方法:重写paintComponent(Graphics g)方法
- 201521123080《Java程序设计》第11周学习总结
- 26 , CSS 构造表单
- JavaSE 初学进度条JProgressBar
- 【CF711D】Directed Roads
- laravel请求到响应的生命周期
- 总结小bug
- eclipse及tomcat设置编码
- 单字节编码&;双字节编码
- C#调用Excel宏
- 10.Spring——框架的AOP
热门文章
- 团队作业——UML设计
- WPFのDecorator 、Adorner和AdornerDecorator
- 理解 tf.Variable、tf.get_variable以及范围命名方法tf.variable_scope、tf.name_scope
- WPF中控件的显示与隐藏
- 【vue】vue +element 搭建项目,将js函数变成vue的函数
- Python框架学习之Flask中的Jinja2模板
- Python框架学习之用Flask创建一个简单项目
- MySQL 主主配置
- Hive学习之路 (一)Hive初识
- ASP.NET 管道