Setelah mempelajari bagaimana penggunaan router, sekarang saya akan membahas penggunaan controller. Pada part sebelumnya saya sudah membahas mengenai pendefinisian router, HTTP Verbs, penggunaan path parameter, dan penggunaan query parameter. Sebelum kita lanjutkan ke materi, mari kita lihat kembali gambar dibawah ini.
Jika kita perhatikan dari gambar diatas, maka request yang kita dapat pada router akan diteruskan ke controller. Lalu bagaimana cara kita mengimplementasikannya pada kode program kita?
Pertama kali kita perlu untuk membuat file controller kita menggunakan Artisan CLI. Untuk membuat file controller menggunakan Artisan CLI, jalankan perintah berikut
$ php artisan make:controller BookController -r
Dengan menjalan perintah diatas, file controller kita akan tergenerate secara otomatis. Sebelumnya kita lanjut, mari kita bedah perintah diatas.
BookControlleradalah parameter yang kita berikan sebagai nama dari file controller kita.-radalah flag yang kita berikan untuk memberitahukan kepada Artisan CLI untuk men-generate template fungsi yang standar pada file controller. Bingung? Mari kita coba membuat file controller baru menggunakan Artisan CLI tanpa flag -r dan menggunakan flag -r.
Berikut adalah file controller yang tergenerate tanpa menggunakan flag -r.
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class BookController extends Controller
{
//
}
Berikut ada file controller yang tergenerate dengan menggunakan flag -r.
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class BookController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
//
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
//
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
//
}
/**
* Display the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function show($id)
{
//
}
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function edit($id)
{
//
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id)
{
//
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
//
}
}
Bisa kita lihat perbedaannya, dimana pada file controller yang tergenerate menggunakan flag -r terdapat template fungsi. Template fungsi inilah yang nantinya kita isi sesuai dengan implementasi kita. Template fungsi yang tergenerate adalah standar untuk operasi CRUD.
Kemudian kita akan melengkapi template fungsi yang sudah ada. Kita juga akan mengubah kode program pada router kita sehingga router tidak akan mengembalikan data secara langsung melainkan akan mengarahkan request ke controller. Pengolahan request nantinya akan dilakukan oleh controller. Berikut adalah file controller and router seteleh dilengkapi.
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class BookController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
return "Method ini nantinya akan digunakan untuk mengambil semua data buku";
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
return "Method ini nantinya akan digunakan untuk menampilkan form untuk menambah data buku";
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
return "Method ini nantinya akan digunakan untuk mencipatakan data buku yang baru";
}
/**
* Display the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function show($id)
{
return "Method ini nantinya akan digunakan untuk mengambil satu data buku dengan id=" . $id;
}
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function edit($id)
{
return "Method ini nantinya akan digunakan untuk menampilkan form untuk mengubah data buku dengan id=" . $id;
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id)
{
return "Method ini nantinya akan digunakan untuk mengubah data buku dengan id=" . $id;
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
return "Method ini nantinya digunakan untuk menghapus data buku dengan id=" . $id;
}
}
<?php
/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/
Route::get('/', function() {
return 'Respon ini diterima dari path / dengan metode GET';
});
Route::get('/books/add', 'BookController@create');
Route::get('/books', 'BookController@index');
Route::post('/books', 'BookController@store');
Route::get('/books/{id}', 'BookController@show');
Route::put('/books/{id}', 'BookController@update');
Route::delete('/books/{id}', 'BookController@destroy');
Route::get('/books/edit/{id}', 'BookController@edit');
Pada kedua potongan kode diatas, bisa kita perhatikan bagaimana cara mengarahkan request dari router ke controller. Pada router akan terdapat kode program seperti berikut.
Route::get('/books/{id}', 'BookController@show');
Mari kita bedah kode program diatas.
/books/{id}adalah path yang akan menampung satu parameter yaituid. Kode program ini sama dengan kode program yang ada pada artikel sebelumnya.BookController@showadalah action yang akan dilakukan ketika terdapat request yang mengarah ke path/books/{id}. Pengertian dari action ini adalah kita akan memanggil methodshowyang terdapat padaBookContoller.
Dengan perubahan kode program seperti diatas, kita telah memindahkan bisnis logic yang ada pada router ke controller. Hal ini akan membuat setiap komponen mengerjakan tugasnya masing-masing. Dengan memindahkan bisnis logic dari router, kita juga akan mengurangi banyaknya kode program pada file web.php dan separation of concert akan tercapai.
Sampai jumpa di-part berikutnya!
Cappy Hoding! 🖖🏾