首先橄登,需要創(chuàng)建一個類來集成Facade類
<?php
namespace App\Facades\GeoIP\Facade;
use Illuminate\Support\Facades\Facade;
class GeoIP extends Facade
{
? ? protected static function getFacadeAccessor()
? ? {
? ? ? ? return 'geoip';
? ? }
}
其次需要注冊服務拖吼,我們可以通過php artisan來創(chuàng)建鲸伴,也可以在app\providers創(chuàng)建桐腌。app/Providers/FacadesServiceProvider.php 代碼如下:
<?php
namespace App\Providers;
use App\Service\ApiService;
use Illuminate\Support\ServiceProvider;
// include the class facade binded
use App\Facades\GeoIP\GeoIP;
class FacadesServiceProvider extends ServiceProvider
{
? ? /**
? ? * 在容器中注冊綁定栖忠。
? ? *
? ? * @return void
? ? */
? ? public function register()
? ? {
? ? ? ? $this->app->singleton('geoip', function ($app) {
? ? ? ? ? ? return new GeoIP($app);
? ? ? ? });
? ? }
}
上面代碼可知召烂,服務提供者注冊時會注冊一個單例,標號為 'geoip'沼琉,也就是我們自己的 facade 返回的那個北苟,然后回調(diào)函數(shù)會返回一個對象,也就是我們封裝 geoip 功能的那個類的實例打瘪,不明白的同學可以看看 laravel 的服務提供者和服務容器相關(guān)知識哦友鼻。(注意要 use 將 facade 和封裝類的命名空間引用一下哦)傻昙。
在config\app.php中找到providers和aliases將provider和Facade命名配置一下
在providers中加入
App\Providers\FacadeServiceProvider::class,
在aliases中加入
'GeoIP' => App\Facades\GeoIP\Facade\GeoIP::class,
注冊完畢后,每次使用 facade::function 的時候彩扔,laravel 會自動解析 facade妆档, 然后創(chuàng)建一個對象給用戶使用,虫碉,而無需用戶自己去 new 一個對象出來