Tutorial Laravel 10 - Part #2 - Route dan Controller

Hello, Kali ini kita akan belajar tentang Route dan Controller di Laravel 10. Pembahasan Route dan Controller dijadikan satu karena keterkaitan keduanya sangat erat, yang mana umumnya Route akan mengarahkan request dari user ke method tertentu yang ada dalam controller.

Mengenal Route di Laravel

Route adalah bagian yang berfungsi untuk mendefinisikan alamat URI dan juga mengarahkan request dari user ke bagian tertentu yang akan memberikan balikan atau response. Response tersebut dapat berasal dari View, Controller, ataupun closure function sederhana seperti berikut:

use Illuminate\Support\Facades\Route;
 
Route::get('/greeting', function () {
    return 'Hello World';
});

Di Laravel, routing ini akan di handle oleh file-file yang ada dalam folder routes. Untuk proyek web yang menggunakan interface akan dihandle oleh file routes/web.php sedangkan untuk pembuatan Rest API routing dihandle oleh routes/api.php.

Route di Laravel mendukung tipe HTTP request sebagai berikut:

Route::get($uri, $callback);
Route::post($uri, $callback);
Route::put($uri, $callback);
Route::patch($uri, $callback);
Route::delete($uri, $callback);
Route::options($uri, $callback);

Selain mengarahkan request user, di dalam Route ini kita juga dapat melakukan proses-proses sebelum request itu diteruskan yang biasanya dilakukan dengan mendaftarkan middleware ke dalam route tersebut. Proses yang biasa dilakukan di middleware di antaranya Authentikasi, Limitasi, Pengecekan kondisi-kondisi tertentu dan sebagainya.

Mengenal Controller di Laravel

Controller adalah salah satu bagian dari konsep MVC (Model-View-Controller) yang diusung oleh Laravel. Di dalam Controller ini kita akan menuliskan logic-logic dari fitur yang akan kita buat. Controller merupakan sebuah class yang di dalamnya terdapat method-method yang mengolah request dan memberikan response terhadap request yang dilakukan oleh user.

Menghubungkan Route dan Controller

Pertama, kita akan membuat sebuah controller ProductContorller terlebih dahulu dengan perintah:

php artisan make:controller ProductController -r

-r pada perintah di atas adalah Resource , yang mana dengan tambahan argument tersebut kita akan dibuatkan sebuah ProductController yang di dalam nya terdapat method-method yang umum digunakan untuk mengelola resource (Product) yaitu: index, create, store, edit, update, dan destroy. Controller tersebut terletak pada app/Http/Controllers/ProductController.php. Lakukan sedikit modifikasi menjadi seperti berikut:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Http\Response;

class ProductController extends Controller
{
    public function index(): Response
    {
        dd('index');
    }

    public function create(): Response
    {
        dd('create');
    }

    public function store(Request $request): RedirectResponse
    {
        dd('store');
    }

    public function show(string $id): Response
    {
        dd('show');
    }

    public function edit(string $id): Response
    {
        dd('edit');
    }

    public function update(Request $request, string $id): RedirectResponse
    {
        dd('update');
    }

    public function destroy(string $id): RedirectResponse
    {
        dd('store');
    }
}

Selanjutkan, kita akan membuat routing yang mengarahkan request user ke method-method dalam ProductController tersebut. Buka file routes/web.php kemudian tambahkan beberapa baris seperti berikut:

<?php
use Illuminate\Support\Facades\Route;

use App\Http\Controllers\ProductController;

Route::get('products', [ProductController::class, 'index'])->name('products.index');
Route::get('products/create', [ProductController::class, 'create'])->name('products.create');
Route::post('products', [ProductController::class, 'store'])->name('products.store');
Route::get('products/{id}/edit', [ProductController::class, 'edit'])->name('products.edit');
Route::put('products/{id}', [ProductController::class, 'update'])->name('products.update');
Route::delete('products/{id}', [ProductController::class, 'destroy'])->name('products.destroy');

Route::get('/', function () {
    return view('welcome');
});

Pada kode program di atas terlihat kita mengimport ProductController , kemudian membuat routing yang mengarah ke method-method di dalamnya dengan tipe-tipe yang disesuaikan kebutuhan : GET, POST, PUT, DELETE.

Alternatif lain, kita juga dapat membuat route untuk ProductController dengan cara yang lebih singkat seperti berikut:

<?php
use Illuminate\Support\Facades\Route;

use App\Http\Controllers\ProductController;

Route::resource('products', ProductController::class);

Akan tetapi dalam kondisi tertentu, akan lebih baik apabila kita membuat route secara spesifik satu-per-satu.

Mencoba Akses Halaman via Browser

Jalan projectnya dengan perintah:

php artisan serve

Buka browser, dan coba akses beberapa alamat berikut:

http://localhost:8000/products
http://localhost:8000/products/create
http://localhost:8000/products/1/edit

Jika tidak ada masalah, maka salah satu tampilannya akan seperti berikut:

Selamat mencoba!

Tulis Komentar