Belajar Membuat Modul CRUD di Laravel 5

Laravel yang merupakan framework PHP MVC populer memiliki fitur bawaan yang mempermudah kita dalam membuat modul CRUD.

0
5948

Menambahkan Route

Pada tahap ini kita akan menambahkan route untuk post sehingga nanti kita bisa akses konten post dengan url misalnya http://karedok.dev/post. Caranya dengan menambahkan bari berikut di file routes/web.php .

Route::resource('post','PostController');

Konfigurasi CRUD: function Controller & Blade file

File controller secara default akan diletakkan di direktori app/Http/Controllers. Buka file PostController.php, di dalamnya kita akan menemukan tujuh method yang sudah dibuat.

<?php

namespace App\Http\Controllers;

use App\Post;
use Illuminate\Http\Request;

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

 Function dan View Untuk Menampilkan Daftar Post

Untuk membuat halaman yang menampilkan daftar post, kita akan melakukan edit di bagian method index(). Sehingga bagian tersebut menjadi seperti berikut:

public function index()
{
 $post = Post::latest()->paginate(5);
 return view('post.index',compact('post'));
}

Penjelasan:

  • Post::
    membuka relasi ke class Post di dalam model
  • latest()
    untuk sortir daftar secara descending (yang terbaru tampilkan lebih dulu)
  • paginate(angka)
    membuat paging sesuai jumlah angka dalam kurung

Sekarang kita akan membuat file untuk menampilkan data. Secara bawaan, Laravel sudah menyediakan template dengan bootstrap sebagai core css nya. Jadi, buat yang sudah terbiasa menggunakan bootstrap, tidak akan kesulitan lagi. Untuk kesempatan kali ini kita akan gunakan template bawaannya.

Secara default, semua view disimpan di resources/views. Untuk keperluan ini kita akan membuat direktori dengan nama post. Sedangkan untuk bagian index(), kita akan membuat file di dalam direktori Post dengan nama index.blade.php . Tentu saja bisa menggunakan nama lain sesuai selera.

cd resources/views
mkdir post
touch post/index.blade.php

Oh iya, semua file yang digunakan untuk view harus ditambahkan .blade di belakang namanya. Kenapa begitu? Ya, begitulah aturan dari Laravelnya. Hehehe…
Buka file index.blade.php dan isi seperti ini:

@extends('layouts.app')

@section('content')
<div class="container">
  <div class="row justify-content-center">
    <div class="col-md-12">

      @if ($pesan = Session::get('pesan'))
      <div class="alert alert-success">
        <p>{{ $pesan }}</p>
      </div>
      @endif

      <div class="card">
        <div class="card-body">
          <div class="float-left">
            <h2>Daftar Konten</h2>
          </div>

          <div class="float-right">
            <a class="btn btn-primary" href="{{ route('post.create') }}"> Post baru</a>
          </div>

          <table class="table table-striped">

            <thead>
              <tr>
                <th>No.</th>
                <th>Judul</th>
                <th>Isi</th>
                <th></th>
              </tr>
            </thead>

            <tbody>
              @foreach($post as $k=>$data)
              <tr>
                <td>{{ $post->firstItem() + $k }}</td>
                <td>{{ $data->judul }}</td>
                <td>{{ str_limit($data->isi, $limit = 250, $end = '...') }}</td>
                <td>
                  <div class="btn-group" role="group">
                    <button id="aksiGroup" type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
                      Aksi
                    </button>
                    <div class="dropdown-menu" aria-labelledby="aksiGroup">
                      <a class="btn btn-info dropdown-item" href="{{ route('post.show',$data->id) }}">Detail</a>
                      <a class="btn btn-warning dropdown-item" href="{{ route('post.edit',$data->id) }}">Edit</a>
                      <form action="{{ route('post.destroy',$data->id) }}" method="POST">
                        @csrf
                        @method('DELETE')
					 <input type="hidden" name="judul" value="{{ $data->judul }}">
                        <button type="submit" class="btn btn-danger dropdown-item">Hapus</button>
                      </form>
                    </div>
                  </div>
                </td>
              </tr>
              @endforeach
            </tbody>

          </table>

          {!! $post->links() !!}

        </div>
      </div>
    </div>
  </div>
  @endsection

Mari diskusi

This site uses Akismet to reduce spam. Learn how your comment data is processed.