Membuat Custom Facades pada Laravel

Andruw
3 min readAug 11, 2022

--

Implementasi Custom Facades sebagai antarmuka static untuk non-static class pada Laravel

Photo by Ben Griffiths on Unsplash

Halo semuanya, apa kabar? Semoga semuanya dalam keadaan baik ya. Kali ini kita akan belajar membuat custom facades untuk class pada Laravel agar method dalam class tersebut bisa digunakan layaknya static method.

Laravel menyediakan facades sebagai antarmuka static untuk class. Secara bawaan laravel memiliki beberapa facades yang menjadi antarmuka dari beberapa fitur dari framework-nya.

Kita juga bisa membuat facades untuk class yang kita buat, atau dengan kata lain membuat custom facades. Salah satu kelebihan dari membuat custom facades ini, kita bisa memanggil method dari class kita seperti memanggil static method.

Pertama kita perlu membuat project dengan framework Laravel tentunya. Pada contoh menggunakan Laravel versi 8.75.

Lalu, kita akan membuat class yang akan kita buatkan facades. Untuk contoh kasus kali ini, kita membuat class di dalam app\Helpers yang mempunyai satu method say() untuk menampilkan string Hi, there. Kita bisa membuat banyak method yang diperlukan dalam class sesuai kebutuhan. Untuk nama class-nya adalah ShowString.

Kemudian, kita membuat facades class-nya, dengan nama sama ShowString. Nama class bisa beda, hanya saja untuk sekarang dibuat sama.

Pada facades class, kita melakukan extends class Facade dari Laravel dengan namespace Illuminate\Support\Facades\Facade. Kemudian kita hanya perlu membuat satu method yaitu getFacadeAccessor(). Method ini akan return nama yang digunakan untuk binding dengan class pada service provider.

Setelahnya, kita membuat service provider bernama HelperServiceProvider. Di dalam service provider ini, kita akan mencari semua file berekstensi .php dalam direktori app\Helpers, lalu mengambil nama dari file tanpa ekstensi. Dari nama file dalam format PascalCase itu, akan dilakukan binding dengan namespace dari class yang kita buat dalam app\Helpers.

Karena hanya ada satu class dalam direktori app\Helpers, hanya akan dilakukan binding ShowString dengan class App\Helpers\ShowString.

Jadi, ketika ada yang melakukan import atau memanggil facades class App\Helpers\Facades\ShowString, akan “dibuatkan” object dari class App\Helpers\ShowString.

Setelah itu, kira perlu melakukan registrasi service provider dengan cara menambahkan namespace dari service provider yang kita buat tadi pada config\app.php

Lalu, kita akan memanggil method dari class ShowString pada controller MainController. Karena kita hanya perlu satu method dalam controller maka kita menggunakan method __invoke().

Dalam controller, dimana kita akan menggunakan method dari class ShowString, kita akan melakukan import facades class App\Helpers\Facades\ShowString.

Terakhir, kita membuat route untuk controller tadi pada routes\web.php.

Berikut adalah stuktur file dan direktori dari project kita.

Struktur Direktori

Berikut adalah hasilnya ketika kita mengakses controller yang akan memanggil class facades tadi.

Tes Custom Facades di Browser

Pada Laravel kita bisa membuat custom facades untuk membuat antarmuka static untuk non-static class. Caranya adalah dengan membuat class yang diperlukan, membuat facades class, membuat service provider, binding pada service provider dan registrasi service provider. Untuk memanggil class yang diperlukan, dengan import class facades-nya. Semoga tulisan kali ini bermanfaat. Sampai jumpa di tulisan selanjutnya. Salam.

--

--

Andruw
Andruw

Written by Andruw

PHP/Laravel Developer | Web Tech Enthusiast

No responses yet