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