Laravel adalah framework PHP yang populer karena kemudahan dan fleksibilitasnya. Bagi pemula yang baru belajar Laravel, memulai dengan project sederhana adalah cara terbaik untuk memahami konsep-konsep dasar. Artikel ini akan membahas Contoh Project Laravel Sederhana untuk Pemula: yaitu membangun aplikasi blog sederhana dengan Laravel. Kita akan membahas langkah demi langkah, dari persiapan hingga implementasi fitur-fitur dasar. Mari kita mulai!
1. Mengapa Aplikasi Blog Cocok Sebagai Project Laravel Pertama?
Aplikasi blog merupakan pilihan ideal sebagai project Laravel sederhana untuk pemula karena beberapa alasan:
- Fitur yang Sederhana: Fitur-fitur utama blog seperti membuat postingan, menampilkan daftar postingan, dan menampilkan detail postingan cukup sederhana untuk dipahami dan diimplementasikan.
- Konsep CRUD (Create, Read, Update, Delete): Blog mengimplementasikan konsep CRUD secara langsung, yang merupakan dasar dari banyak aplikasi web. Membuat, membaca, memperbarui, dan menghapus postingan akan membantu Anda memahami bagaimana berinteraksi dengan database.
- Penerapan Konsep MVC (Model-View-Controller): Laravel menggunakan arsitektur MVC, dan blog memungkinkan Anda untuk mempraktikkan konsep ini. Anda akan membuat model untuk berinteraksi dengan database, view untuk menampilkan data, dan controller untuk menghubungkan keduanya.
- Fleksibilitas Pengembangan: Blog bisa dikembangkan lebih lanjut dengan menambahkan fitur-fitur seperti komentar, kategori, tag, SEO optimization, dan lain-lain, sesuai dengan tingkat pemahaman Anda.
- Banyak Sumber Daya: Ada banyak tutorial, dokumentasi, dan contoh kode online yang tersedia untuk membangun aplikasi blog dengan Laravel, memudahkan Anda untuk mencari bantuan jika mengalami kesulitan.
Dengan alasan-alasan ini, membangun aplikasi blog adalah contoh project Laravel sederhana untuk pemula yang sangat direkomendasikan.
2. Persiapan Awal: Lingkungan Pengembangan dan Instalasi Laravel
Sebelum memulai contoh project Laravel sederhana aplikasi blog, pastikan Anda sudah menyiapkan lingkungan pengembangan yang sesuai. Ini mencakup:
- PHP: Pastikan PHP sudah terinstall di sistem Anda. Laravel membutuhkan PHP versi 7.4 atau lebih tinggi. Anda bisa mengecek versi PHP dengan menjalankan perintah
php -vdi terminal. - Composer: Composer adalah package manager untuk PHP. Gunakan Composer untuk menginstal dan mengelola dependencies Laravel. Anda bisa mengunduh dan menginstal Composer dari https://getcomposer.org/.
- Database: Pilih database yang ingin Anda gunakan. MySQL adalah pilihan yang umum, tetapi Anda juga bisa menggunakan PostgreSQL, SQLite, atau database lainnya yang didukung Laravel. Pastikan server database sudah terinstall dan berjalan.
- Text Editor/IDE: Pilih text editor atau IDE yang nyaman untuk Anda gunakan. Beberapa pilihan populer termasuk Visual Studio Code, Sublime Text, PHPStorm, dan Atom.
Setelah semua persiapan selesai, Anda bisa mulai menginstal Laravel. Buka terminal dan jalankan perintah berikut:
composer create-project --prefer-dist laravel/laravel blog
cd blog
Perintah ini akan membuat project Laravel baru dengan nama blog dan menginstal semua dependencies yang dibutuhkan. Setelah proses instalasi selesai, Anda bisa menjalankan server pengembangan Laravel dengan perintah:
php artisan serve
Aplikasi Laravel Anda sekarang seharusnya sudah bisa diakses melalui browser di alamat http://localhost:8000. Jika Anda melihat halaman default Laravel, berarti instalasi berhasil. Ini adalah langkah awal penting dalam contoh project Laravel sederhana untuk pemula ini.
3. Konfigurasi Database dan Membuat Migrasi untuk Tabel posts
Langkah selanjutnya adalah mengkonfigurasi koneksi database dan membuat migrasi untuk tabel posts, yang akan digunakan untuk menyimpan data postingan blog.
-
Konfigurasi Database: Buka file
.envdi root project Anda. Cari bagian yang berisi konfigurasi database dan ubah nilai-nilainya sesuai dengan pengaturan database Anda. Contoh:DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=blog DB_USERNAME=root DB_PASSWORD=Pastikan Anda mengganti
blog,root, dan password sesuai dengan kredensial database Anda. -
Membuat Migrasi: Gunakan Artisan command untuk membuat file migrasi:
php artisan make:migration create_posts_table --create=postsPerintah ini akan membuat file migrasi baru di folder
database/migrations. Buka file migrasi tersebut dan tambahkan definisi kolom untuk tabelposts. Contoh:<?php use IlluminateDatabaseMigrationsMigration; use IlluminateDatabaseSchemaBlueprint; use IlluminateSupportFacadesSchema; class CreatePostsTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('posts', function (Blueprint $table) { $table->id(); $table->string('title'); $table->text('content'); $table->string('slug')->unique(); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('posts'); } }Kode ini akan membuat tabel
postsdengan kolomid,title,content,slug,created_at, danupdated_at. Kolomslugakan digunakan untuk membuat URL yang ramah SEO untuk setiap postingan. -
Menjalankan Migrasi: Jalankan migrasi untuk membuat tabel di database:
php artisan migratePerintah ini akan menjalankan semua migrasi yang belum dijalankan, termasuk migrasi yang baru saja Anda buat. Periksa database Anda untuk memastikan tabel
poststelah berhasil dibuat. Langkah-langkah ini sangat penting dalam contoh project Laravel sederhana untuk pemula karena ini adalah fondasi dari aplikasi Anda.
4. Membuat Model Post dan Seed Data untuk Pengujian
Setelah tabel posts dibuat, kita perlu membuat Model Post untuk berinteraksi dengan tabel tersebut.
-
Membuat Model: Gunakan Artisan command untuk membuat model
Post:php artisan make:model PostPerintah ini akan membuat file
Post.phpdi folderapp/Models. Buka file tersebut dan tambahkan kode berikut:<?php namespace AppModels; use IlluminateDatabaseEloquentFactoriesHasFactory; use IlluminateDatabaseEloquentModel; class Post extends Model { use HasFactory; protected $fillable = ['title', 'content', 'slug']; }$fillablemendefinisikan kolom mana yang boleh diisi melalui mass assignment. -
Membuat Factory: Gunakan Artisan command untuk membuat factory untuk model
Post:php artisan make:factory PostFactoryPerintah ini akan membuat file
PostFactory.phpdi folderdatabase/factories. Buka file tersebut dan definisikan bagaimana data palsu untuk modelPostakan dibuat. Contoh:<?php namespace DatabaseFactories; use AppModelsPost; use IlluminateDatabaseEloquentFactoriesFactory; use IlluminateSupportStr; class PostFactory extends Factory { /** * The name of the factory's corresponding model. * * @var string */ protected $model = Post::class; /** * Define the model's default state. * * @return array */ public function definition() { $title = $this->faker->sentence; $slug = Str::slug($title); return [ 'title' => $title, 'content' => $this->faker->paragraph(5), 'slug' => $slug, ]; } } -
Membuat Seeder: Gunakan Artisan command untuk membuat seeder untuk model
Post:php artisan make:seeder PostSeederBuka file
PostSeeder.phpdi folderdatabase/seedersdan tambahkan kode berikut:<?php namespace DatabaseSeeders; use AppModelsPost; use IlluminateDatabaseSeeder; class PostSeeder extends Seeder { /** * Run the database seeds. * * @return void */ public function run() { Post::factory(10)->create(); // Create 10 dummy posts } } -
Menjalankan Seeder: Edit file
database/seeders/DatabaseSeeder.phpdan tambahkan pemanggilanPostSeeder:<?php namespace DatabaseSeeders; use IlluminateDatabaseSeeder; class DatabaseSeeder extends Seeder { /** * Seed the application's database. * * @return void */ public function run() { $this->call([ PostSeeder::class, ]); } }Kemudian jalankan seeder:
php artisan db:seedIni akan membuat 10 postingan palsu di database Anda. Data palsu ini berguna untuk pengujian dan pengembangan. Langkah ini membantu dalam contoh project Laravel sederhana untuk pemula untuk memahami bagaimana data dapat diisi ke database.
5. Membuat Controller untuk Mengelola Postingan Blog
Sekarang kita akan membuat controller untuk menangani logika bisnis terkait postingan blog.
-
Membuat Controller: Gunakan Artisan command untuk membuat controller
PostController:php artisan make:controller PostControllerPerintah ini akan membuat file
PostController.phpdi folderapp/Http/Controllers. Buka file tersebut dan tambahkan method-method berikut:<?php namespace AppHttpControllers; use AppModelsPost; use IlluminateHttpRequest; use IlluminateSupportStr; class PostController extends Controller { /** * Display a listing of the resource. * * @return IlluminateHttpResponse */ public function index() { $posts = Post::latest()->paginate(10); return view('posts.index', compact('posts')); } /** * Show the form for creating a new resource. * * @return IlluminateHttpResponse */ public function create() { return view('posts.create'); } /** * Store a newly created resource in storage. * * @param IlluminateHttpRequest $request * @return IlluminateHttpResponse */ public function store(Request $request) { $request->validate([ 'title' => 'required', 'content' => 'required', ]); $slug = Str::slug($request->title); $post = Post::create([ 'title' => $request->title, 'content' => $request->content, 'slug' => $slug, ]); return redirect()->route('posts.index') ->with('success','Post created successfully.'); } /** * Display the specified resource. * * @param AppModelsPost $post * @return IlluminateHttpResponse */ public function show(Post $post) { return view('posts.show',compact('post')); } /** * Show the form for editing the specified resource. * * @param AppModelsPost $post * @return IlluminateHttpResponse */ public function edit(Post $post) { return view('posts.edit',compact('post')); } /** * Update the specified resource in storage. * * @param IlluminateHttpRequest $request * @param AppModelsPost $post * @return IlluminateHttpResponse */ public function update(Request $request, Post $post) { $request->validate([ 'title' => 'required', 'content' => 'required', ]); $slug = Str::slug($request->title); $post->update([ 'title' => $request->title, 'content' => $request->content, 'slug' => $slug, ]); return redirect()->route('posts.index') ->with('success','Post updated successfully'); } /** * Remove the specified resource from storage. * * @param AppModelsPost $post * @return IlluminateHttpResponse */ public function destroy(Post $post) { $post->delete(); return redirect()->route('posts.index') ->with('success','Post deleted successfully'); } }Controller ini memiliki method
index,create,store,show,edit,update, dandestroyyang sesuai dengan operasi CRUD.indexmenampilkan daftar postingan,createmenampilkan form untuk membuat postingan baru,storemenyimpan postingan baru ke database,showmenampilkan detail postingan,editmenampilkan form untuk mengedit postingan,updatememperbarui postingan di database, dandestroymenghapus postingan. Perhatikan penggunaanStr::slug()untuk membuat slug dari judul postingan.
6. Membuat Views untuk Menampilkan Data Postingan
Selanjutnya, kita akan membuat views untuk menampilkan data postingan di browser. Kita akan membuat beberapa view:
posts/index.blade.php: Menampilkan daftar postingan.posts/create.blade.php: Menampilkan form untuk membuat postingan baru.posts/show.blade.php: Menampilkan detail postingan.posts/edit.blade.php: Menampilkan form untuk mengedit postingan.
Buat folder posts di dalam folder resources/views dan buat file-file view di dalamnya. Berikut adalah contoh kode untuk setiap view:
-
posts/index.blade.php:<!DOCTYPE html> <html> <head> <title>Laravel Blog</title> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css"> </head> <body> <div class="container mt-2"> <div class="row"> <div class="col-lg-12 margin-tb"> <div class="pull-left"> <h2>Laravel Blog</h2> </div> <div class="pull-right mb-2"> <a class="btn btn-success" href="{{ route('posts.create') }}"> Create New Post</a> </div> </div> </div> @if ($message = Session::get('success')) <div class="alert alert-success"> <p>{{ $message }}</p> </div> @endif <table class="table table-bordered"> <tr> <th>ID</th> <th>Title</th> <th>Content</th> <th width="280px">Action</th> </tr> @foreach ($posts as $post) <tr> <td>{{ $post->id }}</td> <td>{{ $post->title }}</td> <td>{{ Str::limit($post->content, 100) }}</td> <td> <form action="{{ route('posts.destroy',$post->id) }}" method="Post"> <a class="btn btn-primary" href="{{ route('posts.edit',$post->id) }}">Edit</a> @csrf @method('DELETE') <button type="submit" class="btn btn-danger">Delete</button> <a class="btn btn-info" href="{{ route('posts.show',$post->id) }}">Show</a> </form> </td> </tr> @endforeach </table> {!! $posts->links() !!} </div> </body> </html> -
posts/create.blade.php:<!DOCTYPE html> <html> <head> <title>Create Post</title> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css"> </head> <body> <div class="container mt-2"> <div class="row"> <div class="col-lg-12 margin-tb"> <div class="pull-left"> <h2>Create New Post</h2> </div> <div class="pull-right"> <a class="btn btn-primary" href="{{ route('posts.index') }}"> Back</a> </div> </div> </div> @if(session('status')) <div class="alert alert-success mb-1 mt-1"> {{ session('status') }} </div> @endif <form action="{{ route('posts.store') }}" method="POST" enctype="multipart/form-data"> @csrf <div class="row"> <div class="col-xs-12 col-sm-12 col-md-12"> <div class="form-group"> <strong>Post Title:</strong> <input type="text" name="title" class="form-control" placeholder="Post Title"> @error('title') <div class="alert alert-danger mt-1 mb-1">{{ $message }}</div> @enderror </div> </div> <div class="col-xs-12 col-sm-12 col-md-12"> <div class="form-group"> <strong>Post Content:</strong> <textarea class="form-control" style="height:150px" name="content" placeholder="Post Content"></textarea> @error('content') <div class="alert alert-danger mt-1 mb-1">{{ $message }}</div> @enderror </div> </div> <div class="col-xs-12 col-sm-12 col-md-12"> <button type="submit" class="btn btn-primary ml-3">Submit</button> </div> </div> </form> </div> </body> </html> -
posts/show.blade.php:<!DOCTYPE html> <html> <head> <title>Show Post</title> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css"> </head> <body> <div class="container mt-2"> <div class="row"> <div class="col-lg-12 margin-tb"> <div class="pull-left"> <h2> Show Post</h2> </div> <div class="pull-right"> <a class="btn btn-primary" href="{{ route('posts.index') }}"> Back</a> </div> </div> </div> <div class="row"> <div class="col-xs-12 col-sm-12 col-md-12"> <div class="form-group"> <strong>Post Title:</strong> {{ $post->title }} </div> </div> <div class="col-xs-12 col-sm-12 col-md-12"> <div class="form-group"> <strong>Post Content:</strong> {{ $post->content }} </div> </div> </div> </div> </body> </html> -
posts/edit.blade.php:<!DOCTYPE html> <html> <head> <title>Edit Post</title> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css"> </head> <body> <div class="container mt-2"> <div class="row"> <div class="col-lg-12 margin-tb"> <div class="pull-left"> <h2>Edit Post</h2> </div> <div class="pull-right"> <a class="btn btn-primary" href="{{ route('posts.index') }}"> Back</a> </div> </div> </div> @if(session('status')) <div class="alert alert-success mb-1 mt-1"> {{ session('status') }} </div> @endif <form action="{{ route('posts.update',$post->id) }}" method="POST" enctype="multipart/form-data"> @csrf @method('PUT') <div class="row"> <div class="col-xs-12 col-sm-12 col-md-12"> <div class="form-group"> <strong>Post Title:</strong> <input type="text" name="title" value="{{ $post->title }}" class="form-control" placeholder="Post Title"> @error('title') <div class="alert alert-danger mt-1 mb-1">{{ $message }}</div> @enderror </div> </div> <div class="col-xs-12 col-sm-12 col-md-12"> <div class="form-group"> <strong>Post Content:</strong> <textarea class="form-control" style="height:150px" name="content" placeholder="Post Content">{{ $post->content }}</textarea> @error('content') <div class="alert alert-danger mt-1 mb-1">{{ $message }}</div> @enderror </div> </div> <div class="col-xs-12 col-sm-12 col-md-12"> <button type="submit" class="btn btn-primary ml-3">Submit</button> </div> </div> </form> </div> </body> </html>Views ini menggunakan Bootstrap untuk tampilan yang lebih menarik. Mereka menampilkan data postingan dan menyediakan form untuk membuat dan mengedit postingan.
7. Menentukan Rute (Routes) untuk Mengakses Fungsi Controller
Setelah controller dan views dibuat, kita perlu mendefinisikan rute (routes) untuk mengakses fungsi-fungsi controller dari browser. Buka file routes/web.php dan tambahkan rute berikut:
<?php
use IlluminateSupportFacadesRoute;
use AppHttpControllersPostController;
/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/
Route::get('/', function () {
return view('welcome');
});
Route::resource('posts', PostController::class);
Route::resource('posts', PostController::class); akan membuat semua rute yang diperlukan untuk operasi CRUD pada postingan. Ini adalah cara yang efisien untuk mendefinisikan rute untuk resource (dalam hal ini, posts). Sekarang Anda dapat mengakses aplikasi blog Anda melalui URL seperti /posts, /posts/create, /posts/{post}, dan seterusnya. Pengaturan rute ini adalah bagian penting dari contoh project Laravel sederhana untuk pemula untuk menghubungkan backend dan frontend.
8. Implementasi Slug dan SEO Sederhana pada Postingan Blog
Salah satu aspek penting dari blog adalah SEO (Search Engine Optimization). Mari kita tambahkan implementasi slug dan SEO sederhana ke postingan blog kita.
-
Membuat Slug: Kita sudah membuat slug otomatis dari judul postingan saat menyimpan data di controller (
Str::slug($request->title)). Slug ini digunakan untuk membuat URL yang ramah SEO. -
Menampilkan Slug di View: Pada view
posts/show.blade.php, tambahkan tampilan slug:<div class="col-xs-12 col-sm-12 col-md-12"> <div class="form-group"> <strong>Slug:</strong> {{ $post->slug }} </div> </div> -
Menggunakan Slug di Rute: Ubah rute untuk
showmenjadi menerima slug sebagai parameter:Route::get('/posts/{post:slug}', [PostController::class, 'show'])->name('posts.show');Perhatikan
/{post:slug}. Ini memberitahu Laravel untuk mencari postingan berdasarkan kolomslugalih-alihid. Ubah juga link diposts/index.blade.phpmenjadi menggunakan slug:<a class="btn btn-info" href="{{ route('posts.show',$post->slug) }}">Show</a>
Dengan implementasi slug ini, URL postingan akan menjadi lebih ramah SEO, contohnya: http://localhost:8000/posts/judul-postingan. Ini membantu mesin pencari memahami konten halaman Anda. Ini adalah contoh SEO sederhana yang dapat diimplementasikan pada contoh project Laravel sederhana untuk pemula ini.
9. Menambahkan Fitur Validasi Input untuk Keamanan dan Konsistensi Data
Validasi input sangat penting untuk memastikan data yang disimpan ke database valid dan aman. Kita sudah menambahkan validasi sederhana di controller saat menyimpan dan memperbarui postingan:
$request->validate([
'title' => 'required',
'content' => 'required',
]);
Ini memastikan bahwa kolom title dan content tidak boleh kosong. Laravel menyediakan berbagai macam aturan validasi yang bisa Anda gunakan. Beberapa contoh:
string: Memastikan input berupa string.max:255: Memastikan panjang string tidak lebih dari 255 karakter.unique:posts,title: Memastikan nilai unik di tabelpostspada kolomtitle.
Anda bisa menambahkan aturan validasi yang lebih kompleks sesuai dengan kebutuhan Anda. Menampilkan pesan kesalahan validasi di view juga penting:
@error('title')
<div class="alert alert-danger mt-1 mb-1">{{ $message }}</div>
@enderror
Kode ini akan menampilkan pesan kesalahan jika validasi title gagal. Dengan validasi input yang baik, Anda dapat mencegah data yang tidak valid atau berbahaya masuk ke database Anda. Ini merupakan bagian penting dari keamanan dalam contoh project Laravel sederhana untuk pemula ini.
10. Pengembangan Lanjutan: Menambahkan Kategori, Tag, dan Komentar
Setelah Anda memahami dasar-dasar membangun aplikasi blog sederhana, Anda bisa mengembangkan project ini lebih lanjut dengan menambahkan fitur-fitur seperti kategori, tag, dan komentar.
- Kategori: Buat tabel
categories, modelCategory, dan controllerCategoryController. Tambahkan relasi one-to-many antara modelCategorydanPost. - Tag: Buat tabel
tags, modelTag, dan controllerTagController. Tambahkan relasi many-to-many antara modelTagdanPost. - Komentar: Buat tabel
comments, modelComment, dan relasi one-to-many antara modelPostdanComment. Implementasikan form komentar di viewposts/show.blade.php.
Menambahkan fitur-fitur ini akan meningkatkan kompleksitas project Anda, tetapi juga akan memperdalam pemahaman Anda tentang Laravel. Ini akan membawa contoh project Laravel sederhana untuk pemula ini ke tingkat yang lebih tinggi.
11. Tips dan Trik dalam Pengembangan Project Laravel
Berikut adalah beberapa tips dan trik yang berguna dalam pengembangan project Laravel:
- Gunakan Artisan commands: Artisan command sangat membantu untuk mempercepat proses pengembangan. Manfaatkan command seperti
make:model,make:controller,make:migration, dan lain-lain. - Baca dokumentasi Laravel: Dokumentasi Laravel sangat lengkap dan berisi banyak informasi berguna. Jangan ragu untuk membacanya saat Anda mengalami kesulitan.
- Manfaatkan package Laravel: Ada banyak package Laravel yang tersedia untuk berbagai keperluan. Cari package yang sesuai dengan kebutuhan Anda untuk menghemat waktu dan usaha.
- Gunakan Git untuk version control: Git sangat penting untuk melacak perubahan kode dan berkolaborasi dengan developer lain.
- Tulis unit test: Unit test membantu memastikan kode Anda berfungsi dengan benar dan mencegah bug.
- Belajar dari sumber lain: Ada banyak tutorial, artikel, dan contoh kode online yang tersedia untuk Laravel. Manfaatkan sumber-sumber ini untuk belajar dan meningkatkan kemampuan Anda.
12. Kesimpulan: Belajar Laravel Melalui Praktek Langsung
Membangun contoh project Laravel sederhana untuk pemula seperti aplikasi blog adalah cara yang efektif untuk belajar Laravel. Dengan mengikuti langkah-langkah di atas, Anda akan memahami konsep-konsep dasar Laravel seperti MVC, routing, database, dan views. Jangan takut untuk bereksperimen dan mencoba hal-hal baru. Semakin banyak Anda berlatih, semakin mahir Anda dalam menggunakan Laravel. Selamat mencoba dan semoga sukses!









