06 June 2026 laravel

Membuat Custom Laravel Facade Sendiri

Laravel banyak menggunakan facade di fitur-fiturnya, seperti Auth, Cache, Request dll.

Apa itu facade? Bisakah kita membuat custom facade sendiri? Berikut penjelasannya.

Apa itu Facade?

Facade adalah class yang menjadi jembatan dari class lain agar method di class lain bisa dipanggil lewat class facade seperti static method.

Contoh:

use App\Services\StockService;
use App\Facades\Stock;

// Tanpa facade
public function updateStock() {
	$stockService = new StockService()
	$stockService->incrementStock(10, 1000);
	$stockService->decrementStock(15, 200);
}

// Tanpa facade
public function updateStock(StockService $stockService)
{
	$stockService->incrementStock(10, 1000);
	$stockService->decrementStock(15, 200);
}

// Dengan facade
public function updateStock()
{
	Stock::incrementStock(10, 1000);
	Stock::decrementStock(15, 200);
}

Cara Membuat Facade Sendiri

Pertama, buat class yang ingin dibuat facade. Contoh StockService.

php artisan make:class Services/StockService
<?php

namespace App\Services;

class StockService
{
    public function incrementStock(int $stockId, int $amount) {}
    public function decrementStock(int $stockId, int $amount) {}
}

Kemudian buat class facade untuk class StockService misalnya Stock .

php artisan make:class Facades/Stock
<?php

namespace App\Facades;

class Stock {}

Aktifkan facade pada class facade dengan mengextend Illuminate\Support\Facades\Facade.

<?php

namespace App\Facades;

use Illuminate\Support\Facades\Facade;

class Stock extends Facade {}

Buat static method getFacadeAccessor di class facade yang mengembalikan class service target yang ingin dbuat facade.

<?php

namespace App\Facades;

use Illuminate\Support\Facades\Facade;
use App\Services\StockService;

class Stock extends Facade
{
    public static function getFacadeAccessor()
    {
        return StockService::class;
    }
}

Class facade sudah bisa digunakan. Coba facade dengan memanggil method yang ada di class service secara static dari class facade.

use App\Facades\Stock;

Stock::incrementStock(10, 1000);
Stock::decrementStock(20, 500);

Setup IDE Untuk Class Facade

Untuk mengaktifkan autocomplete pada static method class facade, definisikan setiap method pada class service di class facade menggunakan @method PHPDoc annotation. Contoh:

<?php

namespace App\Facades;

use Illuminate\Support\Facades\Facade;
use App\Services\StockService;

/**
 * 
 * @method static void incrementStock(int $stockId, int $amount)
 * @method static void decrementStock(int $stockId, int $amount)
 */
class Stock extends Facade
{
    public static function getFacadeAccessor()
    {
        return StockService::class;
    }
} 

Hasilnya:

Facade autocomplete