EduChannel Indonesia Blog WeBooks LMS Pembelajaran Video
  • Pencarian
Versi

  • Informasi Buku
  • Pengantar
    • Pengenalan
    • Riwayat Rilis
  • Persiapan
    • Instalasi
    • Konfigurasi
    • Membuat Autentikasi
    • Optimalisasi Laravel
  • Fungsi Dasar
    • Penjaluran
    • Controller
    • View
    • Model
    • Midleware
    • Proteksi CSRF
    • Requests
    • Responses
    • Blade Template
    • Session
    • Validasi
    • Membuat Log

Controller

Dokumentasi dan Tutorial Laravel 9.x Bahasa Indonesia; Diperbarui tanggal: 9/09/2025

# Controller

#Pendahuluan

Controller merupakan suatu bagian penting dari pemrograman MVC yang berfungsi sebagai penghubung antara View dan model. Didalam controller akan terdapat banyak logika-logika pemrograman untuk menyusun fungsi tertentu. Berbagai pemprosesan juga pada umumnya dilakukan didalam controller. Sebagai contoh UserController class merupakan sebuah controller yang bertugas menangani semua perintah yang berhubungan dengan pengguna dari mulai menampilkan, menambahkan, mengupdate, dan menghapus. Secara bawaan file controller akan disimpan pada folder app/Http/Controllers.

#Membuat Controller

# Membuat Controller 

Setiap membuat controller yang pertama dilakukan yaitu kita harus mendefinisikan lokasi file controller dimana kita simpan. Sebagai contoh kita menyimpan file controller pada folder app/Http/Controllers maka kita harus mengawali kode dengan namespace App\Http\Controllers. Selanjutnya kita juga harus memasukkan kelas dasar controller yaitu App\Http\Controllers\Controller yang  merujuk pada file didadalm folder app/Http/Controllers/Controller.php. Sebagai contoh:

<?php
 
namespace App\Http\Controllers;
 
use App\Http\Controllers\Controller;
use App\Models\User;
 
class UserController extends Controller
{
    /**
     * Show the profile for a given user.
     *
     * @param  int  $id
     * @return \Illuminate\View\View
     */
    public function show($id)
    {
        return view('user.profile', [
            'user' => User::findOrFail($id)
        ]);
    }
}

Selanjutnya kita dapat mendefinisikan controller diatas pada route.

use App\Http\Controllers\UserController;
 
Route::get('/user/{id}', [UserController::class, 'show']);

Perintah diatas menggambarkan bahwa ketika user mengakses url dengan alamat /user/id_user maka method show pada kelas App\Http\Controllers\UserController akan dipanggil dan selanjutnya mengirimkan data user ke view yang merujuk pada file resources/views/user/profile.blade.php untuk ditampilkan kepada user. 

# Single Action Controllers/ Controller aksi tunggal

Adakalanya dalam sebuah pemrograman terdapat sebuah prosedur yang komplek dan rumit. Untuk prosedur yang kompleks dan rumit tersebut sebaiknya dibuat dalam controller tunggal menggunakan metode __invoke 

<?php
 
namespace App\Http\Controllers;
 
use App\Http\Controllers\Controller;
use App\Models\User;
 
class ProvisionServer extends Controller
{
    /**
     * Provision a new web server.
     *
     * @return \Illuminate\Http\Response
     */
    public function __invoke()
    {
        // ...
    }
}

Selanjutnya kita dapat meregistrasikan controller tersebut pada route

use App\Http\Controllers\ProvisionServer;
 
Route::post('/server', ProvisionServer::class);

Untuk membuat controller tunggal kita dapat membuatnya secara manual atau melalui php artisan

php artisan make:controller ProvisionServer --invokable


# Controller Middleware

Minddleware selain dapat ditautkan pada route juga dapat dihubungkan secara langsung ke controller. Ini dilakukan biasanya jika middleware tersebut hanya berlaku khusus pada controller tertentu. Sebagai contoh:

class UserController extends Controller
{
    /**
     * Instantiate a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('auth');
        $this->middleware('log')->only('index');
        $this->middleware('subscribed')->except('store');
    }
}

Middleware pertama  $this->middleware('auth') menunjukkan bahwa controller atau web hanya bisa diakses jika pengguna telah login. Kemudian midleware $this->middleware('log')->only('index') menunjukkan bawah laravel akan menuliskan log jika pengguna mengakses metode index. Dan  $this->middleware('subscribed')->except('store') berlaku kesemua metode kecuali metode store. 

# Resource Controllers 

Jika kita ingin membuat sebuah controller yang didalamnya terdapat beberapa metode yang menangani CURD (Create, Update, Read, Delete), maka kita dapat membuatnya melalui php artisan dengan menambahkan opsi --resource. Sebagai contoh kita ingin membuat controller untuk memasukkan riwayat kerja pegawai yang didalamnya terdapat fitur untuk input, update, hapus dan lihat, maka kita dapat melakukannya dengan perintah berikut:

php artisan make:controller RiwayatkerjaController --resource

Perintah diatas akan menghasilkan controller dengan folder app/Http/Controllers/RiwayatkerjaController.php dimana pada controller tersebut telah tersedia metode index, create, store, show, edit, update dan destroy. Selanjutnya kita dapat mendaftarkan controller tersebut pada Route dengan menggunakan metode resource.

use App\Http\Controllers\RiwayatkerjaController;
 
Route::resource('riwayatkerja', RiwayatkerjaController::class);

Secara otomatis route diatas akan memiliki aksi ke controller sebagai berikut:

Metode URI Action Nama Route Keterangan
GET /riwayatkerja index riwayatkerja.index Digunakan untuk menampilkan daftar riwayat kerja
GET /riwayatkerja/create create riwayatkerja.create Digunakan untuk menampilkan form input riwayat kerja
POST /riwayatkerja store riwayatkerja.store Digunakan untuk menyimpan riwayat kerja
GET /riwayatkerja/{id} show riwayatkerja.show Digunakan untuk menampilkan detil riwayat kerja
GET /riwayatkerja/{id}/edit edit riwayatkerja.edit Digunakan untuk membuat form edit riwayat kerja
PUT/PATCH /riwayatkerja/{id} update riwayatkerja.update Digunakan untuk menyimpan data update riwayat kerja
DELETE /riwayatkerja/{id} destroy riwayatkerja.destroy Digunakan untuk menghapus data

# Nested Resources

Nested resources merupakan salah satu metode dalam membuat sub resources pada saat penjaluran dengan mudah. Sebagai contoh misalnya kita ingin membuat penjaluran yang menangani semua pengelolaan komentar dari sebuah artikel maka kita dapat menggunakan metode berikut.

use App\Http\Controllers\ArticleCommentController;

Route::resource('article.comments', ArticleCommentController::class); 

Penjaluran diatas akan didefinisikan sebagai berikut.

Verb URI Action Route Name
GET /article/{photo}/comments index article.comments.index
GET /article/{photo}/comments/create create article.comments.create
POST /article/{photo}/comments store article.comments.store
GET /article/{photo}/comments/{comment} show article.comments.show
GET /article/{photo}/comments/{comment}/edit edit article.comments.edit
PUT/PATCH /article/{photo}/comments/{comment} update article.comments.update
DELETE /article/{photo}/comments/{comment} destroy article.comments.destroy

# Naming Resource Controllers / Penamaan Resource Controllers

Secara bawaan setiap resource controller pada penjaluran memiliki penamaan yang unik, namun kita masih tetap bisa untuk mengubah penamaan tersebut dengan cara menambahkan atribut names pada nama router yang diinginkan.

use App\Http\Controllers\PhotoController;
 
Route::resource('article', PhotoController::class)->names([
    'create' => 'article.build'
]);

 

Copyright ©2022 #EduChannel Indonesia.
Bali - Indonesia