Dependency Injection di Controller


Dependency Injection adalah pola desain yang memungkinkan kita untuk menginjeksi ketergantungan (dependencies) ke dalam sebuah class, daripada class itu sendiri yang membuatnya. Di Laravel, Dependency Injection sangat sering digunakan, terutama di dalam Controller, untuk meningkatkan keterbacaan dan memudahkan pengujian.

Langkah-langkah

1. Membuat Controller

Pertama-tama, kita perlu membuat sebuah controller. Kamu bisa menggunakan perintah Artisan untuk membuatnya.

php artisan make:controller SampleController

2. Membuat Service Class

Selanjutnya, kita bisa membuat service class yang akan kita injeksikan ke dalam controller. Misalnya, kita akan membuat UserService.

namespace App\Services;

class UserService
{
    public function getUserData($id)
    {
        // Logika untuk mendapatkan data user
        return [
            'id' => $id,
            'name' => 'John Doe',
        ];
    }
}

3. Menginjeksikan Service ke Controller

Sekarang, kita akan menggunakan UserService di dalam SampleController. Anda dapat melakukannya melalui constructor.

namespace App\Http\Controllers;

use App\Services\UserService;

class SampleController extends Controller
{
    protected $userService;

    public function __construct(UserService $userService)
    {
        $this->userService = $userService;
    }

    public function show($id)
    {
        $userData = $this->userService->getUserData($id);
        return response()->json($userData);
    }
}

4. Menyiapkan Route

Setelah controller siap, kita perlu menyiapkan route agar bisa mengakses controller tersebut. Buka file routes/web.php dan tambahkan route berikut:

use App\Http\Controllers\SampleController;

Route::get('/user/{id}', [SampleController::class, 'show']);

5. Menggunakan Dependency Injection di Method

Selain menggunakan Dependency Injection di constructor, kamu juga bisa menginjeksikan dependencies langsung di method. Misalnya, kita membuat method baru di SampleController.

public function create(UserService $userService)
{
    // Logika untuk membuat user baru
    return response()->json(['message' => 'User created']);
}

6. Menjalankan Aplikasi

Sekarang, kamu bisa menjalankan aplikasi Laravel dan mengakses URL yang telah kita buat:

php artisan serve

Lalu buka browser dan akses:

http://localhost:8000/user/1

Kesimpulan

Dependency Injection adalah cara yang sangat jitu dalam mengelola dependencies di Laravel. Dengan menggunakan pola ini, kita bisa mengurangi ketergantungan antar class, meningkatkan keterbacaan, dan memudahkan pengujian.

Untuk mendapatkan informasi lebih lanjut, kamu bisa merujuk ke dokumentasi resmi Laravel mengenai Dependency Injection.