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");