Membuat CRUD Pada Laravel 5.5 dengan Visual Studio Code

Selamat Datang, pada tutorial kali ini saya akan mencoba membuat langkah-langkah dalam membuat Contoh sederhana CRUD pada framework Laravel 5.5.

Laravel 

Untuk membuat project dengan laravel 5.5 hal hal berikut yang harus terpenuhi :

  1. PHP >= 5.6.4
  2. OpenSSL PHP Extension
  3. PDO PHP Extension
  4. Mbstring PHP Extension
  5. Tokenizer PHP Extension
  6. XML PHP Extension
  7. Composer
  8. Koneksi internet yang stabil
  9. Editor yang saya gunakan visual studio code (terdapat builtin terminal untuk mempermudah menggunakan command dalam laravel)

Step 1: Create a Laravel project

setelah semua kebutuhan spesifikasi server terpenuhi, maka sekarang kita sudah siap untuk memulai proses instalasi laravel, kita akan membuat proyek laravel dengan nama laravelCRUD dan menyimpan proyek ini pada folder htdocs, silahkan buka CMD, arahkan posisi PATH di htdocs dan ketikkan langkah berikut pada command prompt (terminal), dalam hal ini saya menggunakan system operasi OSX tetapi tenang tidak berbeda dengan yg menggunakan system operasi lain.

composer create-project --prefer-dist laravel/laravel LaravelCRUD

akan membutuhkan waktu kira-kira 2 menit untuk mendownload menggunakan composer.

Jika Sudah Selesai download maka akan ada notifikasi seperti berikut pada baris terakhir dari tampilan console (CMD)

Writing lock file
Generating autoload files
> Illuminate\Foundation\ComposerScripts::postAutoloadDump
> @php artisan package:discover
Discovered Package: fideloper/proxy
Discovered Package: laravel/tinker
Package manifest generated successfully.
> @php artisan key:generate
Application key [base64:FY7GOkRShghtA5/RJgMU8d6WywmeYSv5nkCx+haoFeA=] set successfully.

Menandakan sudah berhasil download Laravel dengan versi terakhir

Sekarang saatnya mencoba menjalankan service laravel dengan mengetikkan perintah di console seperti berikut :

php artisan serve

pastikan anda telah masuk ke dalam folder laravelCRUD yang ada di dalam htdocs

atau jika menggunakan visual studio code silahkan buka project dengan file-> open atau seperti tampak gambar :

untuk menjalankan/menampilkan integrated terminal yang ada di visual studio code dapat di tampilkan dari menu view->integrated terminal seperti tampak di gambar :

dan jika sudah muncul terminal bawaan visual studio code kita tidak perlu repot lagi untuk masuk ke folder tertentu untuk menjalankan perintah bawaan laravel.

tinggal langsung kita ketikkan perintahnya saja .

maka kita dapat mengakases website dengan alamat ip local atau localhost:8000

Step 2: Edit .env file for database configuration

di dalam project root folder, terdapat file yang di sebut .env,  Kita Membutuhkannya untuk membuat konfigurasi  database. Saya menggunakan MySQL database.

// .env

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravelCRUD
DB_USERNAME=root
DB_PASSWORD=

dalam konfigurasi tersebut saya tidak menggunakan password (password kosong) .

Step 3: Use migrations provided by laravel to create users and password_resets table

sebelum melakukan migrate pastikan service database dan apache sudah berjalan di system operasi, buatlah database dengan nama laravelCRUD dapat menggunakan phpmyadmin atau tools database lainnya .

sekarang ketikkan perintah berikut di terminal :

php artisan migrate

setelah migrate selesai (mungkin ada pesan error di sana 🙂 tetapi abaikan dulu ), kita cek database dengan phpmyadmin maka akan muncul 2 tabel seperti gambar berikut :

jika hanya muncul 2 tabel berarti ada error kita fix dulu errornya pertama-tama drop dulu tabel yang sudah di migrate kemudian kita telusuri error yg tampak seperti di gambar :

setelah browsing dapat pemecahan dari link : https://laravel-news.com/laravel-5-4-key-too-long-error

di dalam website tersebut secara umum di jelaskan bahwa mulai laravel 5.4 database mysql atau mariadb sudah mendukung utf8mb4 atau dapat menyimpan emoji. ini hanya dapat berjalan pada aplikasi baru pada database mysql 5.7.7 atau ke atas tidak perlu ada perubahan karena sudah support secara otomatis.

karena saya menggunakan versi mysql di bawahnya maka terjadi errot tersebut, kita cek versi mysql dengan menggunakan phpmyadmin

versi database server saya adalah 5.6

untuk selanjutnya agar tidak error dan pada saat migrate muncul 3 tabel maka langkah adalah dengan merubah file App/Providers/AppserviceProviders.php

 saya menambahkan baris 19 dan 5 (menggunakan class facades dan memberikan parameter default stringlength 191

Kemudian jalankan lagi perintah  :

php artisan migrate

maka kali ini akan berhasil dan tanpa error

kita cek kembali tabel di database dengan phpmyadmin

sudah muncul 3 tabel yaitu migrations, password_resets, dan tabel users yang di generate secara otomatis. untuk membuat login dapat melihat postingan saya sebelumnya.

Step 4: Create a controller file for our CRUD operations.

ketikkan di terminal perintah berikut untuk membuat crudController

php artisan make:controller CRUDController --resource

sekarang cek file controller yang sudah otomatis di generate di folder /http/Controller/CrudController.php

Step 5: Create a model file for CRUD operations.

ketikkan di terminal perintah berikut untuk membuat model Crud

php artisan make:model Crud -m

Sekarang cek file migration yang sudah di generate di folder /database/migrations/xxxx_xx_xx_create_cruds.php

Step 6: Edit crud migration file and create the required fields for the database.

sesuaikan file migrate dengan field-field yang dibutuhkan untuk pembuatan tabel dalam database.

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateCrudsTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('cruds', function (Blueprint $table) {
            $table->increments('id');
            $table->string('title');
            $table->string('post');
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('cruds');
    }
}

setelah merubah pada function up schema database silahkan jalankan kembali perintah migrate :

php artisan migrate

jika sukses kita dapat melihat tabel cruds pada database dengan struktur sebagai berikut :

Step 7: Create views for set up a form

buatlah file master.blade.php pada folder Resources/Views/master.blade.php

<!-- master.blade.php -->

<!doctype html>
<html lang="{{ config('app.locale') }}">
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1">

        <title>CRUD Operations</title>

        <!-- Fonts -->
        <link href="{{asset('css/app.css')}}" rel="stylesheet" type="text/css">
    </head>
    <body>
        <br><br>
        @yield('content')
    </body>
</html>

Sekarang buatlah folder crud di dalam folder views dan buatlah file berikut ini :

  1. index.blade.php
  2. create.blade.php
  3. edit.blade.php

Step 8: Create a form in create.blade.php

membuat form input dengan nama file create.blade.php

<!-- create.blade.php -->

@extends('master')
@section('content')
<div class="container">
  <form>
    <div class="form-group row">
      <label for="lgFormGroupInput" class="col-sm-2 col-form-label col-form-label-lg">Title</label>
      <div class="col-sm-10">
        <input type="text" class="form-control form-control-lg" id="lgFormGroupInput" placeholder="title" name="title">
      </div>
    </div>
    <div class="form-group row">
      <label for="smFormGroupInput" class="col-sm-2 col-form-label col-form-label-sm">Post</label>
      <div class="col-sm-10">
        <textarea name="post" rows="8" cols="80"></textarea>
      </div>
    </div>
    <div class="form-group row">
      <div class="col-md-2"></div>
      <input type="submit" class="btn btn-primary">
    </div>
  </form>
</div>
@endsection

Step 9: Setup a route for the request handling.

merubah atau seting routing untuk crudController

<?php

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

semua fungsi crud ada di controller CRUDController

Step 10: Edit CRUDController File

// CRUDController.php

  /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        return view('crud.create');
    }

disini di dalam CRUDController.php terdapat fungsi create yang berisi mengembalikan view crud.view

tampilan dari routing ini dapat di akses melalui browser :

http://localhost:8000/crud/create

Step 11: Add CSRF token and set the post route of the form.

menambahkan CSRF token dan mengatur routing dari form

<!-- create.blade.php -->

@extends('master')
@section('content')
<div class="container">
  <form method="post" action="{{url('crud')}}">
    <div class="form-group row">
      {{csrf_field()}}
      <label for="lgFormGroupInput" class="col-sm-2 col-form-label col-form-label-lg">Title</label>
      <div class="col-sm-10">
        <input type="text" class="form-control form-control-lg" id="lgFormGroupInput" placeholder="title" name="title">
      </div>
    </div>
    <div class="form-group row">
      <label for="smFormGroupInput" class="col-sm-2 col-form-label col-form-label-sm">Post</label>
      <div class="col-sm-10">
        <textarea name="post" rows="8" cols="80"></textarea>
      </div>
    </div>
    <div class="form-group row">
      <div class="col-md-2"></div>
      <input type="submit" class="btn btn-primary">
    </div>
  </form>
</div>
@endsection

kita tambahkan csrf_field agar form aman dari serangan dalam aplikasi web kita

Step 12: Code the store function and use Crud model to insert the data

code fungsi menggunakan Crud model untuk insert data

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Crud;

class CRUDController 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()
    {
        return view('crud.create');
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        $crud = new Crud([
          'title' => $request->get('title'),
          'post' => $request->get('post')
        ]);

        $crud->save();
        return redirect('/crud');
    }

    /**
     * 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)
    {
        //
    }

disini kita akan membuat protected field dengan variabel $filable di dalam file model Crud

// Crud.php
<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Crud extends Model
{
    protected $fillable = ['title','post'];
    protected $table = 'cruds';
    //nama tabel di database
}

dengan metode ini hanya field title dan post yang dapat di isi dari form input dan akan masuk ke database.

Step 13: Code index() function in the CRUDController File.

code index() pada file CRUDController

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class CRUDController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        //
         $cruds = Crud::all()->toArray();
        
        return view('crud.index', compact('cruds'));
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        //
        return view('crud.create');

    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
   public function store(Request $request)
    {
        $crud = new Crud([
          'title' => $request->get('title'),
          'post' => $request->get('post')
        ]);

        $crud->save();
        return redirect('/crud');
    }


    /**
     * 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)
    {
        //
    }
}

Step 14: Need to update index.blade.php

mengedit file index.blade.php

<!-- index.blade.php -->
@extends('master')
@section('content')
  <div class="container">
    <table class="table table-striped">
    <thead>
      <tr>
        <th>ID</th>
        <th>Title</th>
        <th>Post</th>
      </tr>
    </thead>
    <tbody>
      @foreach($cruds as $post)
      <tr>
        <td>{{$post['id']}}</td>
        <td>{{$post['title']}}</td>
        <td>{{$post['post']}}</td>
      </tr>
      @endforeach
    </tbody>
  </table>
  </div>
@endsection

 

Step 15: Add Edit and Delete Button in the index.blade.php

langkah selanjutnya menambahkan tombol edit dan delete di index.blade.php

<!-- index.blade.php -->

@extends('master')
@section('content')
  <div class="container">
    <table class="table table-striped">
    <thead>
      <tr>
        <th>ID</th>
        <th>Title</th>
        <th>Post</th>
        <th colspan="2">Action</th>
      </tr>
    </thead>
    <tbody>
      @foreach($cruds as $post)
      <tr>
        <td>{{$post['id']}}</td>
        <td>{{$post['title']}}</td>
        <td>{{$post['post']}}</td>
        <td><a href="{{action('CRUDController@edit', $post['id'])}}" class="btn btn-warning">Edit</a></td>
        <td><a href="{{action('CRUDController@destroy', $post['id'])}}" class="btn btn-danger">Delete</a></td>
      </tr>
      @endforeach
    </tbody>
  </table>
  </div>
@endsection

silahkan cek di browser dengan url localhost:8000/crud

Step 16: Create an edit function to pass the data to the edit view.

membuat function edit data pada CRUDController.php

<?php

// CRUDController.php  
/**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {
        $crud = Crud::find($id);
        
        return view('crud.edit', compact('crud','id'));

    }

Step 17: Create an edit view.

membuat tampilan form edit view dengan nama edit.blade.php

<!-- edit.blade.php -->

@extends('master')
@section('content')
<div class="container">
  <form method="post" action="{{action('CRUDController@update', $id)}}">
    <div class="form-group row">
      {{csrf_field()}}
       <input name="_method" type="hidden" value="PATCH">
      <label for="lgFormGroupInput" class="col-sm-2 col-form-label col-form-label-lg">Title</label>
      <div class="col-sm-10">
        <input type="text" class="form-control form-control-lg" id="lgFormGroupInput" placeholder="title" name="title" value="{{$crud->title}}">
      </div>
    </div>
    <div class="form-group row">
      <label for="smFormGroupInput" class="col-sm-2 col-form-label col-form-label-sm">Post</label>
      <div class="col-sm-10">
        <textarea name="post" rows="8" cols="80">{{$crud->post}}</textarea>
      </div>
    </div>
    <div class="form-group row">
      <div class="col-md-2"></div>
      <button type="submit" class="btn btn-primary">Update</button>
    </div>
  </form>
</div>
@endsection

Step 18: Code update() in the CRUDController.

membuat function update di CRUDController.php

<?php

// CRUDController.php

 /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {
        $crud = Crud::find($id);
        $crud->title = $request->get('title');
        $crud->post = $request->get('post');
        $crud->save();
        return redirect('/crud');
    }

Step 19: Create a delete form to delete the data.

membuat form delete data pada index.blade.php

<!-- index.blade.php -->

@extends('master')
@section('content')
  <div class="container">
    <table class="table table-striped">
    <thead>
      <tr>
        <th>ID</th>
        <th>Title</th>
        <th>Post</th>
        <th colspan="2">Action</th>
      </tr>
    </thead>
    <tbody>
      @foreach($cruds as $post)
      <tr>
        <td>{{$post['id']}}</td>
        <td>{{$post['title']}}</td>
        <td>{{$post['post']}}</td>
        <td><a href="{{action('CRUDController@edit', $post['id'])}}" class="btn btn-warning">Edit</a></td>
        <td>
          <form action="{{action('CRUDController@destroy', $post['id'])}}" method="post">
            {{csrf_field()}}
            <input name="_method" type="hidden" value="DELETE">
            <button class="btn btn-danger" type="submit">Delete</button>
          </form>
        </td>
      </tr>
      @endforeach
    </tbody>
  </table>
  </div>
@endsection

Step 20: Code the destroy() method in the CRUDController.

membuat function destroy pada CRUDController.php

?php
// CRUDController.php

/**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
      $crud = Crud::find($id);
      $crud->delete();

      return redirect('/crud');
    }

Output

routing list yang ada di laravel project kita

+--------+-----------+------------------+--------------+---------------------------------------------+--------------+
| Domain | Method    | URI              | Name         | Action                          | Middleware   |
+--------+-----------+------------------+--------------+---------------------------------------------+--------------+
|        | GET|HEAD  | /                |              | Closure                          | web          |
|        | GET|HEAD  | api/user         |              | Closure                          | api,auth:api |
|        | GET|HEAD  | crud             | crud.index   | App\Http\Controllers\CRUDController@index   | web          |
|        | POST      | crud             | crud.store   | App\Http\Controllers\CRUDController@store   | web          |
|        | GET|HEAD  | crud/create      | crud.create  | App\Http\Controllers\CRUDController@create  | web          |
|        | GET|HEAD  | crud/{crud}      | crud.show    | App\Http\Controllers\CRUDController@show    | web          |
|        | PUT|PATCH | crud/{crud}      | crud.update  | App\Http\Controllers\CRUDController@update  | web          |
|        | DELETE    | crud/{crud}      | crud.destroy | App\Http\Controllers\CRUDController@destroy | web          |
|        | GET|HEAD  | crud/{crud}/edit | crud.edit    | App\Http\Controllers\CRUDController@edit    | web          |
+--------+-----------+------------------+--------------+---------------------------------------------+--------------+

Untuk Download file code program silahkan Like fanspage kami

[sociallocker id=817]Github : https://github.com/KrunalLathiya/Laravel54 [/sociallocker]