1. Laravel
  2. PHP

Menggunakan Controller pada Laravel

Pada artikel ini kita akan membahas bagaimana menggunakan controller pada Laravel. Controller merupakan bagian yang menjembatani model dan view. Controller ini berisi perintah-perintah yang berfungsi untuk memproses suatu data dan mengirimkannya ke halaman web.

Pada artikel Memahami Routing pada Laravel telah kita bahas bagaimana merender view menggunakan router. Dari pada mendefinisikan semua logika penanganan permintaan sebagai Closure dalam file route, akan lebih baik jika kita mengelompokan logika penanganan permintaan ke dalam sebuah class Controller.

Basic Controller

Berikut ini adalah contoh sederhana dalam menggunakan controller pada Laravel.

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class BlogController extends Controller
{
    public function index()
    {
        return 'Ini halaman blog';
    }
}

Class controller yang dibuat harus merupakan turunan dari class controller utama dari Laravel (Illuminate\Routing\Controller)

Kemudian kita bisa mendefinisikan sebuah route ke action controller ini.

Route::get('blog', 'BlogController@index');

Ketika pengguna melakukan request ke halaman /blog method index pada class BlogController akan dieksekusi dan diteruskan ke pengguna.

Artisan Command

Laravel secara default telah menyediakan command untuk generate controller.

php artisan make:controller BlogController

Ketika menjalankan perintah diatas, Laravel akan secara otomatis membuat sebuah class controller dengan nama BlogController (app/Http/Controllers)

Jika kita perlu untuk mengelompokan class controller dalam directory yang berbeda, kita bisa menambahkan nama directory sebelum nama class controller yang akan dibuat, misalnya kita akan memisahkan semua controller yang menangani request untuk area administrator pada directory Admin.

php artisan make:controller Admin\\BlogController

Perintah diatas akan membuat BlogController class pada directory app/Http/Controllers/Admin.

Controller & Namespace

Ketika kita mendefinisikan controller action pada sebuah route, pada dasarnya kita harus menggunakan nama class lengkap dengan namespacenya.

Route::get('blog', 'App\Http\Controllers\BlogController@index')

Akan tetapi mengapa pada contoh sebelumnya kita tidak perlu mendefinisikan class controller lengkap dengan namespacenya? Karena ada sebuah class yaitu RouteServiceProvider (app\Providers\RouteServiceProvider) yang memuat file route kita dalam group yang berisi namespace.

class RouteServiceProvider extends ServiceProvider
{
    /**
     * This namespace is applied to your controller routes.
     *
     * In addition, it is set as the URL generator's root namespace.
     *
     * @var string
     */
    protected $namespace = 'App\Http\Controllers';

    /**
     * Define the "web" routes for the application.
     *
     * These routes all receive session state, CSRF protection, etc.
     *
     * @return void
     */
    protected function mapWebRoutes()
    {
        Route::middleware('web')
             ->namespace($this->namespace)
             ->group(base_path('routes/web.php'));
    }

Perhatikan property namespace pada class diatas, kita mendefinisikan namespace pada group web routes, oleh karena itu kita tidak perlu mendefinisikan full namespace class pada file route.

Jika kita bermaksud untuk mengelompokan controller pada sebuah directory, misal kita mengelompokan semua controller untuk halaman Administrator. Jadi jika kita membuat class controller dengan namespace App\Http\Controllers\Administrator\BlogController maka kita harus mendefinisikan route ke controller ini seperti berikut.

Route::get('admin/blog', 'Administrator\BlogController@index')

Single Action Controller

Jika kita perlu mendefinisikan sebuah controller hanya dengan 1 action, kita bisa menggunakan method __invoke pada controller.

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class BlogController extends Controller
{
    public function __invoke()
    {
        return view('blog.index');
    }
}

Ketika membuat route untuk controller ini, kita tidak perlu mendefinisikan method.

Route::get('blog', 'BlogController')

Kita juga bisa membuat invokable controller ini dengan command artisan

php artisan make:controller BlogController --invokable
Comments to: Menggunakan Controller pada Laravel

    Your email address will not be published. Required fields are marked *

    Attach images - Only PNG, JPG, JPEG and GIF are supported.