關於laravel門面和服務提供者使用的一點看法,門面之詞,不足之處,還請多多指教。
在laravel中,咱們可能須要用到本身添加的類時,能夠創建一個文件夾專門存放類文件,也可使用laravel的服務提供者的方式來使用。php
這二者其實區別不大,主要是前者使用的話,會跟業務代碼產生依賴,想象一下,若是一個控制器之中引用了不少自定義的類文件的話,那麼能夠想像會產生多少依賴,因此咱們可使用服務提供者的方式,向laravel的容器內註冊類,這樣的話,就可以在一個單獨的配置文件裏面來管理依賴,邏輯和後期維護也會方便很多。nginx
使用門面主要是能夠不須要去實例化類,可使用靜態方法的方式去訪問類的方法,用起來也比較方便,不過這樣其實也有缺點,好比不可以直接跳轉到對應的方法內部,也不能直觀的去了解這個方法的用法,我的開發可能影響不大,不過若是團隊開發的,其實用起來可能會讓人有點暈暈的吧。laravel
好了,話很少說,仍是用代碼來講話吧。ruby
此代碼是創建在laravel5.3的基礎上markdown
1、創建一個須要用到類
在app
目錄下面見一個lib\Tools\FooBar.php
文件,這是咱們的工具類,裏面是咱們定義的代碼。app
<?php namespace App\Lib\Tools; class FooBar { public function get() { return 'hello facade'; } }
2、創建一個服務提供者
使用php artisan make:provider FooServiceProvider
建立一個服務提供者,並將咱們剛纔編寫的工具類註冊到容器裏面,ide
<?php namespace App\Providers; use Illuminate\Support\ServiceProvider; use App\Lib\Tools\FooBar; class FooServiceProvider extends ServiceProvider { /** * Bootstrap the application services. * * @return void */ public function boot() { // } /** * Register the application services. * * @return void */ public function register() { $this->app->bind('foo',function(){ return new FooBar(); }); } }
若是須要慢加載的話,則須要添加在改服務提供者中添加一個$defer
屬性。並定義一個provides方法。以下所示:工具
protected $defer = true; public function provides() { return [FooBar::class]; }
3、註冊服務提供者
在config\app.php
文件中的providers
屬性裏面註冊咱們剛添加的服務提供者,以下所示:post
/* * Application Service Providers... */ App\Providers\AppServiceProvider::class, App\Providers\AuthServiceProvider::class, // App\Providers\BroadcastServiceProvider::class, App\Providers\EventServiceProvider::class, App\Providers\RouteServiceProvider::class, App\Providers\FooServiceProvider::class,
這樣咱們就能夠在項目中的任何地方使用咱們剛纔定義的工具類,能夠直接在某個類的方法裏面注入,而後就能夠直接調用了。若是想要使用門面的話,能夠往下看。測試
4、建立一個門面類
在app
目錄下面建立一個門面類,App\CustomFacades\Foo.php
,目錄這裏是我本身創建的,這個能夠隨便建立。只要在後面註冊的時候一致就能夠。代碼以下:
<?php namespace App\CustomFacades; use Illuminate\Support\Facades\Facade; class Foo extends Facade { protected static function getFacadeAccessor() { return 'foo'; } }
5、註冊門面
在config\app.php
的aliases
屬性中追加下面的代碼:
'Foo' => App\CustomFacades\Foo::class,
以上步驟就註冊完成了,咱們能夠調用測試一下是否可用。
在routes\console.php
裏面添加下面的代碼:
Artisan::command('testFacade',function(){ dd(Foo::get()); });
而後在項目根目錄的終端裏面,調用下面的命令:
php artisan testFacade
若是輸出 hello facade
則說明都註冊成功,接下來,咱們能夠在項目的任何地方使用該自定義門面啦。
結束語
本篇文章主要介紹了怎麼在laravel中使用自定義的服務提供者和門面類,基本上都是參照的官方文檔,若是有什麼錯誤或者其餘的地方,還望各位多指點指點。