Tutorial CRUD Laravel 8 Dengan Bootstrap #3 : Menampilkan Data dari Database


Fika Ridaul Maulayya
I'm a Full-Stack Web Developer, Content Creator and CO-Founder Santri Koding. I share everything i know with Articles, Screencasts and E-Books at SantriKoding.com

Halo teman-teman semuanya, di artikel sebelumnya kita sudah belajar bersama-sama tentang bagaimana cara membuat migratiion dan menjalankan migration di dalam Laravel 8, pada kesempatan kali ini kita semua akan belajar bagaimana cara menampilkan data dari database menggunakan Laravel 8 dan untuk tampilannya kita menggunakan Bootstrap. Langsung saja kita mulai.

Langkah 1 - Membuat Controller Blog

Pertama kita akan membuat controller blog terlebih dahulu, penamaan controller untuk best practice-nya di sarankan menggunakan kata singular. Untuk mengetahui tentang Best Practice di dalam Laravel, teman-teman bisa membacanya di link berikut ini : https://santrikoding.com/laravel-best-practices.

Silahkan jalankan perintah berikut ini untuk membuat controller blog.

php artisan make:controller BlogController

Jika berhasil teman-teman akan mendapatkan 1 file baaru di dalam folder app/Http/Controllers/BlogController.php. Silahkan buka file tersebut kemudian ubah kode-nya menjadi seperti berikut ini :

<?php

namespace App\Http\Controllers;

use App\Models\Blog;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;

class BlogController extends Controller
{    
    /**
     * index
     *
     * @return void
     */
    public function index()
    {
        $blogs = Blog::latest()->paginate(10);
        return view('blog.index', compact('blogs'));
    }
}

Di atas pertama kita import Model Blog terlebih dahulu, karena kita akan menggunakan model ini untuk menampilkan data, input data dan yang lain-nya.

use App\Models\Blog;

Kemudian kita juga import Http Request dari Laravel, ini akan kita manfaatkan untuk mendapatkan data request dari sisi client untuk di masukkan di dalam database saat proses input data.

use Illuminate\Http\Request;

Dan kita juga import Facades Storage dari Laravel, ini akan kita manfaatkan untuk melakukan store atau upload data gambar ke dalam server.

use Illuminate\Support\Facades\Storage;

Kemudian di atas kita menambahkan 1 method/function baru yaitu index, ini akan kita manfaatkan untuk menampilkan data blog di dalam project kita.

Di dalam function index kita memanggil Model Blog kemudian mengurutkan datanya berdasarkan terbaru dengan method latest() dan membatasi data yang ditampilkan sejumlah 10 data perhalaman.

$blogs = Blog::latest()->paginate(10);

Setelah itu kita memanggil sebuah view dengan nama index.blade.php di dalam folder blog yang mana folder tersebut berada di dalam folder resources/views/. Dan kita parsing data blog tersebut ke dalam view menggunakan helper compact.

return view('blog.index', compact('blogs'));

Langkah 2 - Konfigurasi Namespace Route

Di dalam Laravel 8 untuk proses pembuatan route akan sedikit berbeda dengan versi-versi laravel sebelumnya, dimana untuk konfigurasi namespace akan di set ke null, yang artinya jika kita ingin membuat route baru, harus melakukan import namespace di dalam file routes/web.php.

Akan tetapi kita juga bisa mengaturnya agar tidak harus melakukan import namespace di dalam file route, langsung saja kita mulai. Silahkan buka file app/Providers/RouteServiceProvider.php kemudian cari kode berikut ini :

protected $namespace = null;

Kemudian ganti menjadi seperti berikut ini :

protected $namespace = 'App\Http\Controllers';

Di atas kita membuat agar namespace dari controller kita arahkan ke dalam folder app/Http/Controllers. Dan setelah itu kita juga harus melakukan register namespace di dalam method boot.

public function boot()
{
  $this->configureRateLimiting();

  $this->routes(function () {
      Route::middleware('web')
        ->namespace($this->namespace) // <— tambahkan ini
        ->group(base_path('routes/web.php'));


      Route::prefix('api')
        ->namespace($this->namespace) // <— tambahkan ini
        ->middleware('api')
        ->group(base_path('routes/api.php'));
 });
}

Langkah 3 - Membuat Route

Setelah kita belajar konfigurasi route untuk default namespacenya, maka sekarang kita bisa membuat route utuk blog controller. Silahkan buka file routes/web.php kemudian tambahkan kode berikut ini :

Route::resource('blog', BlogController::class);

Di atas kita menggunakan route dengan jenis resources, yang artinya route tersebut sudah complete, mulai dari index, create, store, edit, update dan destroy. Jadi kita tidak perlu define route satu-satu. Jika kita coba jalankan perintah di bawah ini maka teman-teman bisa melihatnya.

php artisan route:list


Langkah 4 - Membuat View

Setelah kita berhasil menambahkan route, sekarang kita lanjutkan untuk membuat view untuk menampilkan data blog di layar browser. Silahkan buat folder baru dengan nama blog di dalam folder resources/views/ dan kemudian di dalam folder blog silahkan buat file baru dengan nama index.blade.php dan massukkan kode berikut ini :

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Data Blogs - SantriKoding.com</title>
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
    <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/toastr.js/latest/toastr.min.css">
</head>
<body style="background: lightgray">

    <div class="container mt-5">
        <div class="row">
            <div class="col-md-12">
                <div class="card border-0 shadow rounded">
                    <div class="card-body">
                        <a href="{{ route('blog.create') }}" class="btn btn-md btn-success mb-3">TAMBAH BLOG</a>
                        <table class="table table-bordered">
                            <thead>
                              <tr>
                                <th scope="col">GAMBAR</th>
                                <th scope="col">JUDUL</th>
                                <th scope="col">CONTENT</th>
                                <th scope="col">AKSI</th>
                              </tr>
                            </thead>
                            <tbody>
                              @forelse ($blogs as $blog)
                                <tr>
                                    <td class="text-center">
                                        <img src="{{ Storage::url('public/blogs/').$blog->image }}" class="rounded" style="width: 150px">
                                    </td>
                                    <td>{{ $blog->title }}</td>
                                    <td>{!! $blog->content !!}</td>
                                    <td class="text-center">
                                        <form onsubmit="return confirm('Apakah Anda Yakin ?');" action="{{ route('blog.destroy', $blog->id) }}" method="POST">
                                            <a href="{{ route('blog.edit', $blog->id) }}" class="btn btn-sm btn-primary">EDIT</a>
                                            @csrf
                                            @method('DELETE')
                                            <button type="submit" class="btn btn-sm btn-danger">HAPUS</button>
                                        </form>
                                    </td>
                                </tr>
                              @empty
                                  <div class="alert alert-danger">
                                      Data Blog belum Tersedia.
                                  </div>
                              @endforelse
                            </tbody>
                          </table>  
                          {{ $blogs->links() }}
                    </div>
                </div>
            </div>
        </div>
    </div>
    
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
    <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js"></script>
    <script src="//cdnjs.cloudflare.com/ajax/libs/toastr.js/latest/toastr.min.js"></script>

    <script>
        //message with toastr
        @if(session()-> has('success'))
        
            toastr.success('{{ session('success') }}', 'BERHASIL!'); 

        @elseif(session()-> has('error'))

            toastr.error('{{ session('error') }}', 'GAGAL!'); 
            
        @endif
    </script>

</body>
</html>

Di atas untuk menampilkan data blog kita menggunakan perulangan forelse, dimana kita bisa melakukan perulangan data jika ada tersebut tersedia dan jika data tidak ada maka akan menampilkan message bahwa data belum tersedia, kurang lebih seperti berikut ini :

@forelse ($blogs as $blog)

    //perulangan data blog

@empty

    <div class="alert alert-danger">
      Data Blog belum Tersedia.
    </div>

@endforelse

Kemudian untuk menampilkan alert setelah kita berhasil menambahkan data, disini kita menggunakan library Toastr, untuk menampilkannya kurang lebih seperti berikut ini :

<script>
  //message with toastr
  @if(session()-> has('success'))
        
     toastr.success('{{ session('success') }}', 'BERHASIL!'); 

  @elseif(session()-> has('error'))

     toastr.error('{{ session('error') }}', 'GAGAL!'); 
            
  @endif
</script>

Alert ini bisa kita lihat saat kita berhasil atau gagal melakukan input data, update data dan hapus data.

Dan untuk menampilkan image dari post, di atas kita menggunaka kode seperti berikut ini :

<img src="{{ Storage::url('public/blogs/').$blog->image }}" class="rounded" style="width: 150px">

Langkah 5 - Menjalankan Project

Sekarang kita bisa mencoba menjalankan projectnya di http://localhost:8000/blog dan jika berhasil kurang lebih tampilannya seperti berikut ini :


Di atas kita sudah berhasil menampilkan data dari database, message itu muncul karena kita belum memiliki data apapun di dalam table blogs, di artikel selanjutnya kita semua akan belajar bagaimana cara insert data ke dalam database di Laravel 8. Terima Kasih


Fika Ridaul Maulayya
I'm a Full-Stack Web Developer, Content Creator and CO-Founder Santri Koding. I share everything i know with Articles, Screencasts and E-Books at SantriKoding.com
KEBIJAKAN KOMENTAR

Saat memberikan komenatar silahkan memberikan informasi lengkap tentang error, seperti: screenshot, link kode, dll. Baca aturan komentar kami

KOMENTAR