Back to IF3110 Pengembangan Aplikasi Berbasis Web

Topic

Questions/Cues

  • Apa itu Controller?

  • Mengapa butuh Controller?

  • Lokasi Controller?

  • Base Controller?

  • Perintah Artisan?

  • Contoh Controller?

  • Bagaimana Rute memanggil Controller?

  • Apa itu Single Action Controller?

  • Method __invoke?

  • Rute untuk Single Action Controller?

Reference Points

  • Slides IF3110-10b-Web-Application-Framework-Laravel.pdf (Slide 52-56)

Definisi Controller

Controller adalah class yang bertugas mengatur logika penanganan request (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 extend class App\Http/Controllers/Controller.

  • Perintah Artisan: Cara termudah membuat controller adalah dengan Artisan CLI:

    php artisan make:controller UserController

Contoh Controller (Basic)

  1. File Controller (app/Http/Controllers/UserController.php):
<?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)
			]);
		}
	}
?>
  1. 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().

  1. File Controller (app/Http/Controllers/ProvisionServer.php):
class ProvisionServer extends Controller {
	/**
	* Menjalankan provisi server baru.
	*/
	public function __invoke() {
		// ... Logika provisi server ...
	}
}
  1. 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 penanganan request, 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 method controller 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.