Controller adalah class yang bertugas mengatur logika penangananrequest(request handling). Ini adalah ‘C’ dalam arsitektur MVC (Model-View-Controller).
Tujuan:
Daripada mendefinisikan semua logika penanganan request sebagai Closure (fungsi anonim) di dalam file routes/web.php, kita memindahkannya ke class Controller.
Mengapa? Ini membuat file rute tetap bersih, rapi, dan mudah dibaca. Logika aplikasi menjadi lebih terorganisir dan mudah dikelola.
Membuat Controller
Lokasi: Disimpan di direktori app/Http/Controllers/.
Base Class: Semua controller harus extendclassApp\Http/Controllers/Controller.
Perintah Artisan: Cara termudah membuat controller adalah dengan Artisan CLI:
<?php namespace App\Http\Controllers; use App\Http\Controllers\Controller; use App\Models\User; class UserController extends Controller { /** * Menampilkan profile untuk user tertentu. */ public function show($id) { return view('user.profile', [ 'user' => User::findOrFail($id) ]); } }?>
File Rute (routes/web.php):
Kita “menghubungkan” rute ke method show di UserController:
use App\Http\Controllers\UserController;Route::get('/user/{id}', [UserController::class, 'show']);
(Artinya: Untuk request GET ke /user/{id}, panggil method show di UserController).
Single Action Controllers
Terkadang, sebuah controller hanya bertugas melakukan satu aksi/tindakan saja (misal: ProvisionServer).
Daripada membuat method kustom (seperti store atau run), kita bisa membuat controller ini sebagai Single Action Controller.
Method Khusus:Controller ini hanya akan memiliki satu method “ajaib” yaitu __invoke().
class ProvisionServer extends Controller { /** * Menjalankan provisi server baru. */ public function __invoke() { // ... Logika provisi server ... }}
File Rute (routes/web.php):
Saat mendaftarkan rute, kita tidak perlu menyebut nama method-nya. Laravel akan otomatis mencari __invoke().
use App\Http\Controllers\ProvisionServer;Route::post('/server', ProvisionServer::class);
Summary
Controller di Laravel adalah class yang berfungsi sebagai organisator logika penangananrequest, memisahkan logika dari definisi rute (prinsip ‘C’ dalam MVC). Controller disimpan di app/Http/Controllers dan dibuat menggunakan php artisan make:controller. Kita menghubungkan rute ke methodcontroller menggunakan sintaks array[ControllerName::class, 'methodName']. Untuk controller yang hanya melakukan satu tugas, kita dapat menggunakan Single Action Controller dengan mengimplementasikan method__invoke(), yang memungkinkan kita memanggil controller langsung dari rute tanpa menentukan nama method.
Additional Information
Topik Teknis: find() vs. findOrFail()
Dalam contoh controller (slide 53), methodUser::findOrFail($id) digunakan. Ini adalah helper yang sangat berguna.
User::find($id): Akan mencari user dengan ID tersebut. Jika tidak ditemukan, ia akan mengembalikan null. Kode Anda akan rusak jika Anda mencoba mengakses null->name di view.
User::findOrFail($id): Akan mencari user. Jika tidak ditemukan, ia akan otomatis menghentikan eksekusi dan mengirimkan halaman error HTTP 404 (Not Found) ke pengguna.
Menggunakan findOrFail jauh lebih bersih dan aman di dalam controller daripada melakukan pengecekan if (!$user) { abort(404); } secara manual.
Topik Teknis: Resource Controllers
Slide (halaman 58) menyebutkan “Resource Controller” sebagai materi selanjutnya. Ini adalah konsep yang sangat mempercepat pengembangan.
Jika Anda memiliki modelPost, Anda pasti butuh halaman untuk:
Menampilkan semua post (index)
Menampilkan form create (create)
Menyimpan post baru (store)
Menampilkan satu post (show)
Menampilkan form edit (edit)
Menyimpan updatepost (update)
Menghapus post (destroy)
Daripada membuat 7 rute dan 7 method manual, Anda bisa:
Membuat controller: php artisan make:controller PostController --resource