Teach Me Laravel Pt.4 – Controller

multinity

Sebelumnya kita sudah membahas tentang route pada Laravel dan saya asumsikan kamu sudah paham dengan konsep route pada Laravel.

Seperti yang telah saya katakan sebelumnya, bahwa dikesempatan kali ini kita akan mempelajari dan mencoba memahami tentang controller pada Laravel.

Let’s go …

Controller

Masih ingat apa yang sudah kita buat sebelumnya? Ya, kita sudah membuat route pada project yang telah kita buat pada tutorial pertama yaitu inventory. Ketika pengguna mengakses route yang kita buat tersebut, maka akan menampilkan view yang telah disesuaikan pada masing-masing route. 

Tentu, dengan cara tersebut sangat tidak efektif mengingat Laravel framework yang berarsitektur MVC. Jadi, seharusnya ketika pengguna mengakses atau melakukan permintaan pada route yang ada, maka route tersebut mengirim permintaan pengguna ke controller. Nah, disinilah peran controller yaitu untuk meng-handle permintaan pengguna seperti menerima data dari form, mengambil data dari model, melakukan operasi aritmatika dan lain sebagainya dan tentu juga hasil proses yang telah dilakukan oleh controller tersebut lalu dikirimkan ke view untuk disajikan ke pengguna. Masih bingung? Ok, tidak apa-apa.

Kasus

Untuk mempermudah memahami controller ini maka kita akan mencoba menggunakan contoh kasus. Ketika kita membuat sebuah sistem atau aplikasi maka tidak asing lagi dengan istilah CRUD(create, read, update, delete), kan? Jika tidak menggunakan framework atau menggunakan PHP native maka kita membuat setidaknya 6 file hanya untuk membuat sebuah CRUD. Kita asumsikan file-file tersebut seperti berikut:

  • read.php – berisi kode untuk membaca semua data pada tabel
  • create.php – berisi kode tampilan untuk form input data
  • edit.php – berisi kode tampilan untuk form edit data
  • insert.php – berisi kode untuk memproses data yang dikirim oleh form yang ada pada file create.php dan memasukkannya kedalam tabel
  • update.php – berisi kode untuk memproses data yang dikirim oleh form yang ada pada file edit.php dan memperbaruinya kedalam tabel
  • delete.php – berisi kode untuk menghapus data pada tabel berdasarkan id yang dikirim pada file read.php

Tentu, sangat repot bukan setiap transaksi data seperti select, insert, update dan delete dilakukan pada file yang terpisah. Maka dari itu, di sinilah salah satu fungsi dari controller untuk meng-organize method-method tersebut(select, insert, update dan delete).

Pada Laravel, untuk membuat sebuah controller sangat mudah. Kita hanya perlu menjalankan perintah berikut pada CMD/Terminal.

php artisan make:controller NamaController

Nama controller yang akan dibuat bagusnya menggunakan “camel case” dan controller yang telah dibuat maka berada di dalam folder app/Http/Controllers.

Mari kita buat controller dengan nama PageController.

php artisan make:controller PageController

Jika berhasil maka akan menampilkan output seperti ini.

Controller created successfully.

Buka file PageController.php ke text editor dan isinya akan seperti berikut.

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class PageController extends Controller
{
    //
}

Buat method baru dengan nama index, maka hasilnya akan seperti berikut.

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class PageController extends Controller
{
    public function index() {
    	return 'Hello, saya method index!';
    }
}

return berfungsi untuk mengakhiri eksekusi kode, jadi jika ada kode lain di bawah kode return maka tidak akan diproses atau dieksekusi. Di atas kita bisa melihat, setelah return ada tulisan ‘Hello, saya method index!’ itu artinya method tersebut memiliki nilai ‘Hello, saya method index!’ ketika dipanggil.

Untuk mencobanya, mari kita buat route baru pada file routes/web.php. Tambahkan kode berikut ke dalam file tersebut.

Route::get('page', 'PageController@index');

Kode di atas sama saja seperti ditutorial sebelumnya, yaitu untuk membuat route baru. Hanya saja di-parameter kedua kita isi dengan nama controller dan nama method yang baru kita buat dan itu berarti ketika pengguna mengirim permintaan atau mengakses route “/page” pada project Laravel kita maka akan ditangani oleh method pada controller tersebut.

Tanda “@” adalah untuk pemisah antara nama controller dengan nama method dan kita berikan index untuk nama method pada route tersebut karena method tersebutlah yang nantinya menangani ketika pengguna mengakses route “/page” dan itu berarti ketika pengguna mengakses URL http://localhost/inventory/public/page maka akan menampilkan tulisan ‘Hello, saya method index!’ karena kita sudah memberikan nilai pada method index dengan tulisan tersebut.


Mari kita buat method lainnya, buat method dengan nama about, contact dan article. 

public function about() {
	return 'Hello, saya method about!';
}

public function contact() {
	return 'Hello, saya method contact!';
}

public function article($id) {
	return 'Hello, saya method article dengan id: ' . $id . '!';
}

Maka keseluruhannya akan terlihat seperti berikut.

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class PageController extends Controller
{
    public function index() {
    	return 'Hello, saya method index!';
    }

    public function about() {
    	return 'Hello, saya method about!';
    }

    public function contact() {
    	return 'Hello, saya method contact!';
    }

    public function article($id) {
    	return 'Hello, saya method article dengan id: ' . $id . '!';
    }
}

Untuk mencobanya maka buat route untuk masing-masing method tersebut.

Route::get('page/about', 'PageController@about');
Route::get('page/contact', 'PageController@contact');
Route::get('page/article/{id}', 'PageController@article');

Untuk mengakses ketiga method tersebut maka gunakan URL berikut.

  • http://localhost/inventory/public/page/about
  • http://localhost/inventory/public/page/contact
  • http://localhost/inventory/public/page/article/10

Sekarang saya akan jelaskan untuk method article saja, karena kedua method lainnya sama seperti method index. Kenapa kita harus menyisipkan angka 10 pada route article? Karena, kita memberikan ‘{id}’ pada route article tersebut. Maksud dari ‘{id}’ adalah untuk mengizinkan kita mengirimkan sesuatu ke method tersebut melalui URL dan method tersebut akan menerima nilai dari sesuatu yang dikirimkan melalui URL dengan menggunakan variable yang disisipkan pada method tersebut. Sudah paham? Jika belum, silahkan baca berulang-ulang tulisan ini.

Final Words

Artikel ini membantu kamu untuk memhami mengenai controller pada Laravel. Artikel berikutnya, kita akan membahas tentang model. Semoga pada artikel ini kamu dapat memahami mengenai controller dan semoga artikel ini bermanfaat.

Digital Ocean baner
Series Navigation<< Teach Me Laravel Pt.3 – RouteTeach Me Laravel Pt.5 – Migrations, Model dan Eloquent >>

Muhamad Nauval Azhar

Syarifuddin St, Bogor 16115