Iman Sugirman

Membuat Facade Custom Laravel dan ServiceProvider

23 Februari 2022

Laravel membuat para developer semakin flexible dengan adanya fitur ini, jadi kita bisa membuat Facade custom yang akan kita buat sendiri, disini saya hanya akan menerangkan bagaimana cara ServiceProvider dan Facade Custom dan contoh penggunaannya.

Pertama kita buat ServiceProvider terlebih dahulu contoh kita akan menarik data dari Api Raja Ongkir Api : dan kita akan membuat file RajaongkirServiceProvider

php artisan make:provider RajaongkirServiceProvider

Ubah file RajaongkirServiceProvider di folder app/Providers dan ubah menjadi seperti ini :

... use App\Services\RajaongkirService; ... /** * Register services. * * @return void */ public function register() { $this->app->singleton('Rajaongkir', function ($app) { return new RajaongkirService; }); } ...

dan tambahkan file class Rajaongkir.php di folder Facades yang kita buat juga jadi hasilnya nanti akan ada di App\Facades\Rajaongkir.php

<?php namespace App\Facades; use Illuminate\Support\Facades\Facade; class Rajaongkir extends Facade { protected static function getFacadeAccessor() { return 'Rajaongkir'; } }

dan sekarang kita buat file untuk Servicenya di folder Services yang nanti akan jadi seperti ini Services/RajaongkirService.php dan nanti isinya seperti ini :

<?php namespace App\Services; use Illuminate\Support\Facades\Http; class RajaongkirService { public function __construct() { $this->key = 'apikey'; $this->url = 'https://api.rajaongkir.com/starter'; } public function getProvince() { // Kita gunakan facade Http untuk http client $data = Http::withHeaders([ 'key' => $this->key])->acceptJson()->get($this->url.'/province'); return $data->json(); }

Cara menggunakan Facade diatas nanti kita terapkan di controller dengan contoh kita akan membuat / memunculkan Provinsi yang ada di rajaongkir, pertama kita akan buat dulu controllernya dengan :

php artisan make:controller ProvinceController

Lalu di index method kita akan memanggil facade tersebut

<?php namespace App\Http\Controllers\Member; use App\Http\Controllers\Controller; use Illuminate\Http\Request; use App\Facades\Rajaongkir; class ProvinceController extends Controller { public function index() { $province = Rajaongkir::getProvince(); dd($province); } }

nah sekarang kita sudah bisa mengkonsumsi api dari Rajaongkir. kamu juga bisa kembangkan fitur ini untuk integrasi api, integrasi lainnya yang tak terbatas.

Semoga bermanfaat..