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
5940

Funtion dan View Untuk Input Data

Langkahnya sama, kita buat controller nya terlebih dahulu baru kemudian view nya. Buka kembali file PostController.php, kali ini kita akan mengedit bagian create() & store().
Pada bagian create(), edit sehingga menjadi seperti berikut:

public function create()
{
 return view('post.create');
}

Untuk bagian store(), isinya menjadi seperti berikut:

public function store(Request $request)
{
  request()->validate([
    'judul' => 'required',
    'isi' => 'required',
  ]);
  Post::create($request->all());

  $request->session()->flash('pesan','Post '.$request['judul'].' berhasil disimpan.');

  return redirect()->route('post.index');
}

request()->validate

kita melakukan validasi formulir. Dalam contoh ini kita memberikan required, yang artinya harus diisi.

Post::create($request->all());

Menyimpan data ke dalam database.

$request->session()->flash()

Membuat session sementara berisi pesan.

return redirect()

Mengalihkan ke halaman index.

Buat sebuah file baru di direktori Post dan beri nama create.blade.php . Di dalamnya isikan seperti berikut:

@extends('layouts.app')

@section('content')
<div class="container">
  <div class="row justify-content-center">
    <div class="col-md-10">
      <div class="card">
        <div class="card-body">
          <h2>Post baru</h2>

          @if ($errors->any())
          <div class="alert alert-danger">
            <ul>
              @foreach ($errors->all() as $error)
              <li>{{ $error }}</li>
              @endforeach
            </ul>
          </div>
          @endif

          <form action="{{ route('post.store') }}" method="POST">
            @csrf

            <div class="form-group row">
              <div class="col-md-12">
                <strong>Judul:</strong>
                <input type="text" name="judul" class="form-control" placeholder="Judul">
              </div>
            </div>

            <div class="form-group row">
              <div class="col-md-12">
                <strong>Isi:</strong>
                <textarea class="form-control" rows="5" name="isi" placeholder="Isi post"></textarea>
              </div>
            </div>

            <div class="form-group row">
              <div class="col-md-6">
                <a href="{{ route('post.index') }}" class="btn btn-secondary">Kembali</a>
              </div>
              <div class="col-md-6 text-right">
                <button type="submit" class="btn btn-primary">Submit</button>
              </div>
            </div>

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

Function dan View untuk menampilkan detail

Pada bagian show($id) di controller, ubah menjadi berikut:

public function show(Post $post)
{
  return view('post.show',compact('post'));
}

Buat file view dengan nama show.blade.php isikan dengan:

@extends('layouts.app')

@section('content')
<div class="container">
  <div class="row justify-content-center">
    <div class="col-md-10">
      <div class="card">
        <div class="card-body">
          <h2>{{ $post->judul }}</h2>
          <p>{{ $post->isi }}</p>

          <div class="form-group row">
            <div class="col-md-6">
              <a href="{{ route('post.index') }}" class="btn">Kembali</a>
            </div>
          </div>

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

Function dan View untuk melakukan edit

Pada bagian edit($id) ubah menjadi:

public function edit(Post $post)
{
  return view('post.edit',compact('post'));
}

Pada bagian update($id) ubah menjadi:

public function update(Request $request, Post $post)
{
  request()->validate([
    'judul' => 'required',
    'isi' => 'required',
  ]);

  $post->update($request->all());

  $request->session()->flash('pesan','Post '.$request['judul'].' berhasil diperbarui.');

  return redirect()->route('post.index');
}

Buat file baru, beri nama edit.blade.php dengan isi sebagai berikut:

@extends('layouts.app')

@section('content')
<div class="container">
  <div class="row justify-content-center">
    <div class="col-md-10">
      <div class="card">
        <div class="card-body">
          <h2>Edit Post</h2>

          @if ($errors->any())
          <div class="alert alert-danger">
            <ul>
              @foreach ($errors->all() as $error)
              <li>{{ $error }}</li>
              @endforeach
            </ul>
          </div>
          @endif

          <form action="{{ route('post.update',$post->id) }}" method="POST">
            @csrf
            @method('PUT')

            <div class="form-group row">
              <div class="col-md-12">
                <strong>Judul:</strong>
                <input type="text" name="judul" class="form-control" value="{{ $post->judul }}">
              </div>
            </div>

            <div class="form-group row">
              <div class="col-md-12">
                <strong>Isi:</strong>
                <textarea class="form-control" rows="10" name="isi">{{ $post->isi }}</textarea>
              </div>
            </div>

            <div class="form-group row">
              <div class="col-md-6">
                <a href="{{ route('post.index') }}" class="btn btn-secondary">Kembali</a>
              </div>
              <div class="col-md-6 text-right">
                <button type="submit" class="btn btn-primary">Submit</button>
              </div>
            </div>

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

Function dan View untuk menghapus data

Pada bagian destroy($id), ubah menjadi:

public function destroy(Request $request, Post $post)
{
  $post->delete();

  $request->session()->flash('pesan','Post '.$request['judul'].' berhasil dihapus.');

  return redirect()->route('post.index');
}

Mari diskusi

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