Laravel 5.2 - Routing


Melanjuti tulisan lama saya tentang Laravel. Pada tulisan kali ini saya akan membahas mengenai routing di Laravel v5.2. Di PHP framework, masalah routing adalah hal mutlak yang wajib Anda ketahui. Dan routing ini adalah prinsip yang paling mendasar untuk menghubungkan antara request ke controller sampai ke model dan kembali lagi ke si requester.

Sebelum memasuki tahap praktek ada kiranya kita sedikit mengetahui apa itu routing terlebih dahulu. Sesuai bahasa routing memiliki arti rute, yakni rute atau alur untuk menangani berbagai request dari client atau viewer _seperti GET, POST, PUT, DELETE. Sederhananya seperti Anda memasuki URL (laravel-5-2-routing) ini artinya Anda telah me-_request (GET) pada halaman sesuai dari URL. Atau ketika Anda mengirim komentar pada tulisan ini, itu artinya Anda me-_request_ sebagai POST.

Bacaan sebelumnya untuk tahap instalasi Laravel:

  1. Cara Install Laravel 5.1
  2. Bagi Anda pengguna Ubuntu 16.04 bisa ikuti cara dari video yang telah saya buat sebelumnya.

Perlu diketahui tutorial ini menggunakan Laravel v5.2 sedangkan instalasi di atas menggunakan v5.1 itu tidak menjadi masalah. Caranya sama saja. Ini karena kesalahan saya terlalu lama tidak membahas mengenai Laravel ini hehehe ?.

Implementasi GET

Semua penanganan masalah routing di Laravel terletak pada app/Http/routes.php lihat gambar di bawah ini.

laravel-route-path

Kita akan mendapati source:

Route::get('/', function () {
    return view('welcome');
});

Itu berarti pada request root ( / ) atau halaman utama, Laravel memanggil view pada berkas bernama welcome Anda bisa lihat di resources/views/welcome.blade.php:

laravel-path-view

Anda bisa mengganti menjadi seperti ini:

Route::get('/', function () {
    echo "Halo Laravel";
});

Maka hasilnya akan seperti gambar di bawah ini:

laravel-routing-hello

Anda bisa tambahkan URL /user/nama_Anda. Dengan cara berikut:

Route::get('user/{name}', function ($name) {
    echo "Halo Saya $name";
});

Perhatikan kode di atas, tanda kurung kurawal (bracket) {name} berarti memberikan nilai pada variabel $name. Jika Anda ingin membuat variable yang mendapatkan nilai dari requester, Anda harus memberikan nama dalam bracket sesuai dengan nama variable nya.

laravel-routing-user

Implementasi POST

Untuk mengimplementasikan POST dibutuhkan beberapa teknik khusus. Dimulai dari Laravel versi 5.1 hingga ke atas, semua penangan masalah POST, PUT dan DELETE, harus berada dalam satu grup middleware bernama web.

Route::group(['middleware' => ['web']], function () {
    // taru semua kode route Anda di sini
});

Semua route yang tidak berada dalam grup tersebut tidak akan bisa mengakses session dan melewati CSRF protection. Seperti halnya contoh di atas, kita telah mempraktekan GET di luar grup web middleware. Karena memang kasusnya sederhana yakni hanya merequest URL user dan variable nama.

Studi Kasus

Sekarang kita buat URL halo yang mana akan menampilkan nama Anda dengan sebuah textbox dan tombol submit. Berikut kodenya:

use Illuminate\Http\Request;

Route::get('/', function () {
    echo "Halo Laravel";
});

Route::get('/user/{name}', function ($name) {
    echo "Halo Saya $name";
});

Route::group(['middleware' => ['web']], function () {

    Route::post('halo', function (Request $request) {
        echo "Halo.. perkenalkan, nama saya {$request->nama}";
    });

    Route::get('halo', function () {
        echo '<form method="POST" action="halo" accept-charset="UTF-8">';
        echo '<input type="hidden" name="_token" value="'.csrf_token().'">';
        echo '<input type="text" name="nama"><br/>';
        echo '<input type="submit"></form>';
    });

});

Perhatikan baris pertama use Illuminate\Http\Request; ini wajib Anda gunakan jika Anda ingin mengambil hasil request dari items POST. Perhatikan kode pada baris ke-13 dan ke-14, saya mengambil request dari textbox bernama nama . Perhatikan juga kode pada baris ke-19 yakni:

echo '<input type="hidden" name="_token" value="'.csrf_token().'">';

Wajib ditulis, jika tidak, Anda tidak akan bisa melewati CSRF Protection. Ada tiga cara penulisannya yakni:

<input type="hidden" name="_token" value="{{ csrf_token() }}">
// atau
<input type="hidden" name="_token" value="{!! csrf_token() !!}">
// atau
<input type="hidden" name="_token" value="<?php echo csrf_token() ?>">

Hasilnya akan seperti berikut:

Implementasi PUT dan DELETE

Sengaja saya jadikan satu sub judul karena keduanya pada dasarnya hanya penggunaan metode POST yang ditambahkan sedikit kriteria dalam hal ini PUT dan DELETE. Untuk lebih jelasnya perhatikan kode di bawah ini:

Route::group(['middleware' => ['web']], function () {

    Route::put('coba', function (){
        echo 'PUT';
    });

    Route::delete('coba', function (){
        echo 'DELETE';
    });

    Route::get('coba', function(){
        echo '<form method="POST" action="coba" accept-charset="UTF-8">';
        echo '<input type="hidden" name="_token" value="'.csrf_token().'">';
        echo '<input type="hidden" name="_method" value="PUT">';
        echo '<input type="submit"></form>';
    });
});

Perhatikan pada kode baris ke-14 lihat name="_method" dan value="PUT". Ini artinya Anda memanggil atau me-_request_ PUT. Jika Anda ingin memanggil DELETE tinggal diganti saja value nya menjadi value="DELETE".

Untuk lebih jelasnya lihat video di bawah ini:

Semoga bermanfaat.