Satu Controller untuk Satu Action


Pada rilis Laravel versi 5.3, dikenalkan fitur baru yang memungkinkan developer untuk membuat satu controller yang hanya dapat menangani satu action. Nama resminya, Single Action Controller.

Sebagai contoh, kita ingin membuat halaman baru bernama Dashboard dengan URI /dashboard menggunakan class DashboardController. Hanya akan ada satu aksi (action) pada controller tersebut nantinya. Adapun aksi tersebut akan menampilkan summary data transaksi terbaru misalnya.

Dengan menggunakan magic method __invoke(), hal tersebut dapat dibuat seperti contoh berikut.

Membuat Controller

$ php artisan make:controller DashboardController

Modifikasi berkas DashboardController.php dengan menambah method __invoke() menjadi seperti berikut:

<?php 

namespace App\Http\Controllers;

use App\User;

class DashboardController extends Controller { 

    public function __invoke() { 
        $users = User::get()->count();
        // etc..
        
        return view('dashboard', compact('users'));     
    }
}

Mendefinisikan Route

Definikan controller tersebut pada route sehingga dapat diakses melalui peramban.

<?php
 
/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| This file is where you may define all of the routes that are handled
| by your application. Just tell Laravel the URIs it should respond
| to using a Closure or controller method. Build something great!
|
 */
 
Route::get('/', function () {
    return view('welcome');
});
 
Route::get('dashboard', 'DashboardController');

Terlihat dari berkas route, kita hanya mendefinisikan HTTP verb-nya menggunakan GET, diikuti URI kemudian nama controller, tanpa menyebutkan action/method yang akan digunakan. Dalam kasus ini, Laravel otomatis akan merujuk ke method __invoke() yang ada pada controller.

Tak Berkategori

Yugo Purwanto

Pemrogram PHP dan JavaScript yang sedang sibuk mengembangkan aplikasi Glosarium Bahasa Indonesia.

Tinggalkan Balasan