Tutorial Membuat Laravel CRUD Generator

http://muva.co.ke/blog/wp-content/uploads/2017/05/browser1.png

Create, Read, Update, dan Delete merupakan 4 fungsi dasar yang banyak digunakan aplikasi dalam mengolah data. Nah kali ini, kita akan mencoba membuat generator CRUD untuk memudahkan kita dalam membuat keempat fungsi dasar tersebut. Generator sederhana ini akan kita buat pada framework Laravel.

  1. Membuat project baru

Buat terlebih dahulu project Laravel-mu. Kamu bisa lihat tutorial instalasi nya pada Laravel documentation. Untuk contoh kali ini, saya membuat project bernama Bookstore.

$ composer create-project --prefer-dist laravel/laravel Bookstore

2. Membuat command

Karena generator sederhana yang akan kita buat kali ini berbentuk command, maka kita akan buat terlebih dahulu file command-nya dengan menggunakan php artisan make:command [commandFileName]

php artisan make:command crudGenerator

Command tersebut akan menambahkan satu file baru pada direktori app/Console/Commands yang isinya kurang lebih seperti di bawah ini.

<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
class crudGenerator extends Command{
/**
* The name and signature of the console command.
*
* @var string
*/
  protected $signature = 'command:name';

/**
* The console command description.
*
* @var string
*/

protected $description = 'Command description';
  /**
* Create a new command instance.
*
* @return void
*/

public function __construct(){
parent::__construct();
}

/**
* Execute the console command.
*
* @return mixed
*/
public function handle(){
//
}
}

3. Membuat stubs

Nah, di sinilah kita akan membuat potongan kode dimana nantinya kode itu akan menjadi bagian dari fungsi yang akan dibuat oleh generator. Dalam pembuatan ini, bisa juga stubs ini disebut seperti sebuah template fungsi. Stubs ini disimpan di dalam direktori resources/stubs . Jika belum ada, kamu buat terlebih dahulu direktorinya.

Pada contoh project ini, kebetulan hanya akan membuat controller dan model saja. Selebihnya, kita eksplor lagi di luar ini ya…

Berikut adalah contoh dari Controller.stub

Sedangkan di bawah ini adalah Model.stub

4. Mengubah file command

Ubah bagian signature dan description sesuai dengan keinginan. Pada contoh kali ini, saya akan mengubah signature dan description menjadi:

protected $signature = 'generate:crud {name}';
protected $description = 'Generate Simple CRUD';

Lalu, buat function untuk mengubah controller dan model dari stub yang kita buat tadi menjadi file controller dan model. Tapi sebelumnya, kita tambahkan terlebih dahulu fungsi seperti di bawah ini.

protected function getStub($type){
return file_get_contents(resource_path("stubs/$type.stub"));
}

Fungsi untuk membuat file controller:

protected function controller($name){
$controllerTemplate = str_replace([
'{{modelName}}',
'{{modelNamePlural}}',
'{{modelNameSingular}}'
],
[
$name,
strtolower(str_plural($name)),
strtolower($name)
],
$this->getStub('Controller'));
     file_put_contents(app_path("/Http/Controllers/{$name}Controller.php"), $controllerTemplate);
}

Fungsi untuk membuat file model:

protected function model($name){
$modelTemplate = str_replace(
['{{modelName}}', '{{modelNamePlural}}'],
[$name, strtolower(str_plural($name))],
$this->getStub('Model')
);
file_put_contents(app_path("/{$name}.php"), $modelTemplate);
}

Lalu ubah function handle() menjadi:

public function handle(){
$name = $this->argument('name');
$this->controller($name);
$this->model($name);
   //create api route
File::append(base_path('routes/api.php'),
"Route::post('" . str_plural(strtolower($name)) . "/create', '{$name}Controller@create');
Route::post('" . str_plural(strtolower($name)) . "/show', '{$name}Controller@show');
Route::post('" . str_plural(strtolower($name)) . "/update/{id}', '{$name}Controller@update');
Route::delete('" . str_plural(strtolower($name)) . "/delete/{id}', '{$name}Controller@delete');");
}

Simpan perubahannya dan begitulah, generator ini akan berjalan dengan command $ php artisan generate:crud [name]

Selanjutnya, kamu bisa coba sendiri ke dalam project-mu dengan juga menambahkan database (kamu bisa menggunakan database migrations yang sudah disediakan Laravel). Lalu untuk mengecek apakah fungsi sudah berjalan dengan sesuai atau belum, kamu bisa menggunakan Postman.

Sekian. Selamat mencoba. :))