laravel Facade provider 如何把自己的类或者第三方的类打造成facade样式

下面是偷别人的代码。

基本原理就是把各种类实例化后,放到一个数组里,然后使用到的时候,从这个数组里拿到对应的类处理程序。

下面是偷人家的代码:

SmartLogger.php

namespace App\SmartLogger;
class SmartLogger {
public function log($text) {
$path = storage_path('logs');
$myfile = fopen("{$path}/SmartLog.txt", "a");
fwrite($myfile, $text);
fwrite($myfile, PHP_EOL);
fclose($myfile);
}
}

SmartLoggerFacade.php

namespace App\SmartLogger;
use Illuminate\Support\Facades\Facade;
class SmartLoggerFacade extends Facade
{
protected static function getFacadeAccessor()
{
return 'smartlogger';
}
}

SmartLoggerServiceProvider.php

namespace App\Providers;
use App\SmartLogger\SmartLogger;
use Illuminate\Support\ServiceProvider;
class SmartLoggerServiceProvider extends ServiceProvider
{
/**
* Register services.
*
* @return void
*/
public function register()
{
$this->app->bind('smartlogger',function(){
return new SmartLogger();
});
}
/**
* Bootstrap services.
*
* @return void
*/
public function boot()
{
//
}
} 

打开文件 config\app.php 找到 providers 数组,添加刚创建的类;

App\Providers\SmartLoggerServiceProvider::class

在 aliaes 数组中创建别名

'Smartlogger' => App\SmartLogger\SmartLoggerFacade::class

可以对刚创建的 facades 类进行测试了

这里调用的方法,无认是静态,动态的都可以用::来调用

use App\SmartLogger\SmartLoggerFacade as SmartLogger;




SmartLogger::log("Hi");  
posted @ 2020-12-01 14:31  你好啊,再见了  阅读(133)  评论(0编辑  收藏  举报