3 Projek Website Modern Cocok Dibuat Menggunakan Framework Laravel 11

Di era digital saat ini, teknologi web terus berkembang dengan pesat. Setiap hari, ada pembaruan dan inovasi terbaru yang membuat website semakin modern dan canggih. Menggunakan teknologi yang tepat sangat penting untuk membuat website yang dapat bersaing di pasar digital.

Salah satu teknologi yang menjadi pilihan utama para developer adalah Framework Laravel 11. Dalam artikel ini, kita akan membahas tiga contoh proyek website modern yang cocok dibuat menggunakan Laravel 11, serta fitur-fitur canggih dari Laravel 11 yang mendukung pembuatan website tersebut.

Studi Kasus Website Modern

  1. E-Commerce Platform
    • Contoh: Situs belanja online dengan fitur lengkap seperti pembayaran online, pengelolaan produk, dan pelacakan pesanan.
  2. Sistem Manajemen Konten (CMS)
    • Contoh: Website portal berita atau blog yang dapat diupdate dengan mudah oleh admin tanpa memerlukan pengetahuan coding.
  3. Aplikasi Layanan Kesehatan
    • Contoh: Sistem booking online untuk janji temu dengan dokter, pengelolaan data pasien, dan konsultasi online.

Mengapa Laravel 11 Pilihan Tepat?

Laravel 11 adalah framework PHP yang sangat populer dan sering digunakan untuk membangun aplikasi web modern. Berikut beberapa alasan mengapa Laravel 11 adalah pilihan tepat untuk membuat website modern:

  • Struktur MVC (Model-View-Controller)
    • Memisahkan logika aplikasi, tampilan, dan data sehingga memudahkan pengembangan dan pemeliharaan.
  • Eloquent ORM
    • Memungkinkan manipulasi database dengan sintaks yang sederhana dan intuitif.
  • Blade Templating Engine
    • Menyederhanakan pembuatan dan pengelolaan tampilan dengan fitur-fitur seperti inheritance dan komponen.
  • Artisan CLI
    • Menyediakan command-line interface yang powerful untuk berbagai tugas rutin seperti migrasi database, seeding, dan pembuatan kontroler.
  • Middleware
    • Memudahkan penambahan lapisan keamanan dan logika lainnya tanpa mengganggu arsitektur aplikasi utama.

Fitur-Fitur Laravel 11 untuk Website Modern

1. Livewire

Livewire adalah framework full-stack untuk Laravel yang memungkinkan pembuatan aplikasi dinamis tanpa meninggalkan Laravel. Dengan Livewire, developer bisa membuat komponen front-end yang interaktif tanpa perlu menggunakan JavaScript secara langsung.

Contoh Kode:

use Livewire\\\\Component;

class Counter extends Component
{
    public $count = 0;

    public function increment()
    {
        $this->count++;
    }

    public function render()
    {
        return view('livewire.counter');
    }
}

Blade Templating:

<div>
    <button wire:click="increment">+</button>
    <h1>{{ $count }}</h1>
</div>

2. Laravel Echo

Laravel Echo memungkinkan developer untuk dengan mudah berinteraksi dengan WebSockets, memungkinkan pembuatan aplikasi real-time seperti notifikasi, chat, atau update data secara langsung di halaman pengguna.

Contoh Kode:

Echo.channel('orders')
    .listen('OrderShipped', (e) => {
        console.log(e.order);
    });

3. Laravel Sanctum

Laravel Sanctum menyediakan sistem otentikasi sederhana untuk SPAs (Single Page Applications), aplikasi mobile, dan API token. Sanctum memudahkan implementasi otentikasi dengan token API yang aman dan mudah diintegrasikan.

Contoh Kode:

use Illuminate\\\\Http\\\\Request;
use Illuminate\\\\Support\\\\Facades\\\\Route;

Route::middleware('auth:sanctum')->get('/user', function (Request $request) {
    return $request->user();
});

4. Queue

Laravel Queue menyediakan API yang seragam di seluruh sistem antrian yang didukung. Queue membantu mengeksekusi tugas berat di latar belakang sehingga aplikasi tetap responsif.

Contoh Kode:

dispatch(new SendEmailJob($user));

5. Laravel Scout

Laravel Scout adalah driver pencarian full-text yang sederhana untuk Eloquent, memungkinkan pencarian cepat dan mudah diintegrasikan ke dalam aplikasi Laravel.

Contoh Kode:

use App\\\\Models\\\\Post;

$posts = Post::search('tutorial')->get();

image web task management

6. Task Scheduling

Laravel menyediakan API yang nyaman untuk menjadwalkan tugas-tugas yang berulang. Task Scheduling memudahkan penjadwalan tugas seperti pembersihan database, pengiriman email otomatis, dan lainnya.

Contoh Kode:

$schedule->call(function () {
    DB::table('recent_users')->delete();
})->daily();

Membuat Projek Website Booking Hotel Modern Menggunakan Laravel 11

Membuat website booking hotel yang modern membutuhkan teknologi yang dapat menangani berbagai fitur canggih seperti pemesanan kamar secara real-time, manajemen pengguna, sistem pembayaran, dan notifikasi.

Laravel 11 adalah pilihan yang sangat baik untuk proyek ini karena memiliki berbagai fitur yang mendukung pembuatan aplikasi web yang kompleks dan canggih. Dalam artikel ini, kita akan membahas bagaimana membangun website booking hotel modern menggunakan Laravel 11, fitur-fitur canggih yang bisa digunakan, dan contoh kodingnya.

Fitur Utama Website Booking Hotel

  1. Manajemen Kamar
    • Pengelolaan data kamar seperti tipe, harga, dan ketersediaan.
  2. Sistem Pemesanan
    • Fitur untuk pengguna memesan kamar secara real-time.
  3. Pembayaran Online
    • Integrasi dengan payment gateway untuk memproses pembayaran.
  4. Notifikasi
    • Mengirimkan notifikasi kepada pengguna melalui email atau SMS.
  5. Manajemen Pengguna
    • Registrasi, login, dan profil pengguna.

Contoh Koding dan Implementasi Fitur

1. Manajemen Kamar

Model Kamar:

namespace App\\\\Models;

use Illuminate\\\\Database\\\\Eloquent\\\\Factories\\\\HasFactory;
use Illuminate\\\\Database\\\\Eloquent\\\\Model;

class Room extends Model
{
    use HasFactory;

    protected $fillable = [
        'type',
        'price',
        'availability',
    ];
}

Migration Kamar:

use Illuminate\\\\Database\\\\Migrations\\\\Migration;
use Illuminate\\\\Database\\\\Schema\\\\Blueprint;
use Illuminate\\\\Support\\\\Facades\\\\Schema;

class CreateRoomsTable extends Migration
{
    public function up()
    {
        Schema::create('rooms', function (Blueprint $table) {
            $table->id();
            $table->string('type');
            $table->decimal('price', 8, 2);
            $table->boolean('availability')->default(true);
            $table->timestamps();
        });
    }

    public function down()
    {
        Schema::dropIfExists('rooms');
    }
}

Controller Kamar:

namespace App\\\\Http\\\\Controllers;

use App\\\\Models\\\\Room;
use Illuminate\\\\Http\\\\Request;

class RoomController extends Controller
{
    public function index()
    {
        $rooms = Room::all();
        return view('rooms.index', compact('rooms'));
    }

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

    public function store(Request $request)
    {
        $request->validate([
            'type' => 'required',
            'price' => 'required|numeric',
        ]);

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

        return redirect()->route('rooms.index')
                         ->with('success', 'Room created successfully.');
    }
}

2. Sistem Pemesanan

Model Pemesanan:

namespace App\\\\Models;

use Illuminate\\\\Database\\\\Eloquent\\\\Factories\\\\HasFactory;
use Illuminate\\\\Database\\\\Eloquent\\\\Model;

class Booking extends Model
{
    use HasFactory;

    protected $fillable = [
        'user_id',
        'room_id',
        'check_in',
        'check_out',
        'status',
    ];
}

Migration Pemesanan:

use Illuminate\\\\Database\\\\Migrations\\\\Migration;
use Illuminate\\\\Database\\\\Schema\\\\Blueprint;
use Illuminate\\\\Support\\\\Facades\\\\Schema;

class CreateBookingsTable extends Migration
{
    public function up()
    {
        Schema::create('bookings', function (Blueprint $table) {
            $table->id();
            $table->foreignId('user_id')->constrained();
            $table->foreignId('room_id')->constrained();
            $table->date('check_in');
            $table->date('check_out');
            $table->string('status')->default('pending');
            $table->timestamps();
        });
    }

    public function down()
    {
        Schema::dropIfExists('bookings');
    }
}

Controller Pemesanan:

namespace App\\\\Http\\\\Controllers;

use App\\\\Models\\\\Booking;
use App\\\\Models\\\\Room;
use Illuminate\\\\Http\\\\Request;
use Illuminate\\\\Support\\\\Facades\\\\Auth;

class BookingController extends Controller
{
    public function create(Room $room)
    {
        return view('bookings.create', compact('room'));
    }

    public function store(Request $request, Room $room)
    {
        $request->validate([
            'check_in' => 'required|date',
            'check_out' => 'required|date|after:check_in',
        ]);

        Booking::create([
            'user_id' => Auth::id(),
            'room_id' => $room->id,
            'check_in' => $request->check_in,
            'check_out' => $request->check_out,
            'status' => 'confirmed',
        ]);

        return redirect()->route('bookings.index')
                         ->with('success', 'Booking created successfully.');
    }

    public function index()
    {
        $bookings = Booking::where('user_id', Auth::id())->get();
        return view('bookings.index', compact('bookings'));
    }
}

3. Pembayaran Online

Mengintegrasikan payment gateway seperti Stripe atau Midtrans untuk memproses pembayaran.

Contoh Koding untuk Stripe:

namespace App\\\\Http\\\\Controllers;

use Illuminate\\\\Http\\\\Request;
use Stripe\\\\Stripe;
use Stripe\\\\Charge;

class PaymentController extends Controller
{
    public function create()
    {
        return view('payments.create');
    }

    public function store(Request $request)
    {
        Stripe::setApiKey(env('STRIPE_SECRET'));

        Charge::create([
            'amount' => $request->amount * 100,
            'currency' => 'usd',
            'description' => 'Hotel Booking Payment',
            'source' => $request->stripeToken,
        ]);

        return redirect()->route('payments.success')
                         ->with('success', 'Payment successful.');
    }

    public function success()
    {
        return view('payments.success');
    }
}

4. Notifikasi

Mengirimkan notifikasi melalui email menggunakan fitur Laravel Notification.

Contoh Notifikasi:

namespace App\\\\Notifications;

use Illuminate\\\\Bus\\\\Queueable;
use Illuminate\\\\Contracts\\\\Queue\\\\ShouldQueue;
use Illuminate\\\\Notifications\\\\Messages\\\\MailMessage;
use Illuminate\\\\Notifications\\\\Notification;

class BookingConfirmed extends Notification
{
    use Queueable;

    public function __construct($booking)
    {
        $this->booking = $booking;
    }

    public function via($notifiable)
    {
        return ['mail'];
    }

    public function toMail($notifiable)
    {
        return (new MailMessage)
                    ->line('Your booking has been confirmed.')
                    ->action('View Booking', url('/bookings/' . $this->booking->id))
                    ->line('Thank you for booking with us!');
    }
}

5. Manajemen Pengguna

Menggunakan Laravel Breeze atau Laravel Fortify untuk fitur registrasi, login, dan profil pengguna.

Contoh Koding untuk Laravel Breeze:

composer require laravel/breeze --dev
php artisan breeze:install
php artisan migrate
npm install && npm run dev

6. Implementasi Queue

Untuk tugas latar belakang seperti pengiriman email konfirmasi booking.

Contoh Koding Queue:

namespace App\\\\Jobs;

use App\\\\Models\\\\Booking;
use App\\\\Notifications\\\\BookingConfirmed;
use Illuminate\\\\Bus\\\\Queueable;
use Illuminate\\\\Contracts\\\\Queue\\\\ShouldQueue;
use Illuminate\\\\Foundation\\\\Bus\\\\Dispatchable;
use Illuminate\\\\Queue\\\\InteractsWithQueue;
use Illuminate\\\\Queue\\\\SerializesModels;

class SendBookingConfirmation implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    protected $booking;

    public function __construct(Booking $booking)
    {
        $this->booking = $booking;
    }

    public function handle()
    {
        $this->booking->user->notify(new BookingConfirmed($this->booking));
    }
}

Dispatch Job:

use App\\\\Jobs\\\\SendBookingConfirmation;

dispatch(new SendBookingConfirmation($booking));

Dengan menggunakan Laravel 11, membangun website booking hotel modern menjadi lebih mudah dan efisien. Laravel menyediakan berbagai fitur canggih yang mendukung pembuatan website yang aman, responsif, dan interaktif.

Mulai dari manajemen kamar, sistem pemesanan, pembayaran online, notifikasi, manajemen pengguna, hingga implementasi queue untuk tugas latar belakang. Semua fitur ini membuat Laravel 11 menjadi pilihan yang sangat tepat untuk proyek website booking hotel modern.

Projek Website Sewa Mobil Mewah Menggunakan Laravel 11

Membuat website sewa mobil mewah memerlukan fitur-fitur yang dapat mendukung pengelolaan kendaraan, pemesanan, pembayaran, dan keamanan pengguna. Laravel 11 adalah framework yang ideal untuk membangun aplikasi web semacam ini karena memiliki berbagai fitur canggih yang memudahkan pengembangan dan pemeliharaan aplikasi.

Fitur Utama Website Sewa Mobil Mewah

  1. Manajemen Kendaraan
    • Pengelolaan data mobil seperti tipe, harga sewa, dan ketersediaan.
  2. Sistem Pemesanan
    • Fitur untuk pengguna memesan mobil secara real-time.
  3. Pembayaran Online
    • Integrasi dengan payment gateway untuk memproses pembayaran.
  4. Notifikasi
    • Mengirimkan notifikasi kepada pengguna melalui email atau SMS.
  5. Manajemen Pengguna
    • Registrasi, login, dan profil pengguna.

Fitur Laravel 11 untuk Website Sewa Mobil Mewah

1. Manajemen Kendaraan

Model Kendaraan:

namespace App\\\\Models;

use Illuminate\\\\Database\\\\Eloquent\\\\Factories\\\\HasFactory;
use Illuminate\\\\Database\\\\Eloquent\\\\Model;

class Car extends Model
{
    use HasFactory;

    protected $fillable = [
        'make',
        'model',
        'price_per_day',
        'availability',
    ];
}

Migration Kendaraan:

use Illuminate\\\\Database\\\\Migrations\\\\Migration;
use Illuminate\\\\Database\\\\Schema\\\\Blueprint;
use Illuminate\\\\Support\\\\Facades\\\\Schema;

class CreateCarsTable extends Migration
{
    public function up()
    {
        Schema::create('cars', function (Blueprint $table) {
            $table->id();
            $table->string('make');
            $table->string('model');
            $table->decimal('price_per_day', 8, 2);
            $table->boolean('availability')->default(true);
            $table->timestamps();
        });
    }

    public function down()
    {
        Schema::dropIfExists('cars');
    }
}

Controller Kendaraan:

namespace App\\\\Http\\\\Controllers;

use App\\\\Models\\\\Car;
use Illuminate\\\\Http\\\\Request;

class CarController extends Controller
{
    public function index()
    {
        $cars = Car::all();
        return view('cars.index', compact('cars'));
    }

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

    public function store(Request $request)
    {
        $request->validate([
            'make' => 'required',
            'model' => 'required',
            'price_per_day' => 'required|numeric',
        ]);

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

        return redirect()->route('cars.index')
                         ->with('success', 'Car created successfully.');
    }
}

2. Sistem Pemesanan

Model Pemesanan:

namespace App\\\\Models;

use Illuminate\\\\Database\\\\Eloquent\\\\Factories\\\\HasFactory;
use Illuminate\\\\Database\\\\Eloquent\\\\Model;

class Booking extends Model
{
    use HasFactory;

    protected $fillable = [
        'user_id',
        'car_id',
        'start_date',
        'end_date',
        'status',
    ];
}

Migration Pemesanan:

use Illuminate\\\\Database\\\\Migrations\\\\Migration;
use Illuminate\\\\Database\\\\Schema\\\\Blueprint;
use Illuminate\\\\Support\\\\Facades\\\\Schema;

class CreateBookingsTable extends Migration
{
    public function up()
    {
        Schema::create('bookings', function (Blueprint $table) {
            $table->id();
            $table->foreignId('user_id')->constrained();
            $table->foreignId('car_id')->constrained();
            $table->date('start_date');
            $table->date('end_date');
            $table->string('status')->default('pending');
            $table->timestamps();
        });
    }

    public function down()
    {
        Schema::dropIfExists('bookings');
    }
}

Controller Pemesanan:

namespace App\\\\Http\\\\Controllers;

use App\\\\Models\\\\Booking;
use App\\\\Models\\\\Car;
use Illuminate\\\\Http\\\\Request;
use Illuminate\\\\Support\\\\Facades\\\\Auth;

class BookingController extends Controller
{
    public function create(Car $car)
    {
        return view('bookings.create', compact('car'));
    }

    public function store(Request $request, Car $car)
    {
        $request->validate([
            'start_date' => 'required|date',
            'end_date' => 'required|date|after:start_date',
        ]);

        Booking::create([
            'user_id' => Auth::id(),
            'car_id' => $car->id,
            'start_date' => $request->start_date,
            'end_date' => $request->end_date,
            'status' => 'confirmed',
        ]);

        return redirect()->route('bookings.index')
                         ->with('success', 'Booking created successfully.');
    }

    public function index()
    {
        $bookings = Booking::where('user_id', Auth::id())->get();
        return view('bookings.index', compact('bookings'));
    }
}

3. Pembayaran Online

Mengintegrasikan payment gateway seperti Stripe atau Midtrans untuk memproses pembayaran.

Contoh Koding untuk Stripe:

namespace App\\\\Http\\\\Controllers;

use Illuminate\\\\Http\\\\Request;
use Stripe\\\\Stripe;
use Stripe\\\\Charge;

class PaymentController extends Controller
{
    public function create()
    {
        return view('payments.create');
    }

    public function store(Request $request)
    {
        Stripe::setApiKey(env('STRIPE_SECRET'));

        Charge::create([
            'amount' => $request->amount * 100,
            'currency' => 'usd',
            'description' => 'Car Rental Payment',
            'source' => $request->stripeToken,
        ]);

        return redirect()->route('payments.success')
                         ->with('success', 'Payment successful.');
    }

    public function success()
    {
        return view('payments.success');
    }
}

4. Notifikasi

Mengirimkan notifikasi melalui email menggunakan fitur Laravel Notification.

Contoh Notifikasi:

namespace App\\\\Notifications;

use Illuminate\\\\Bus\\\\Queueable;
use Illuminate\\\\Contracts\\\\Queue\\\\ShouldQueue;
use Illuminate\\\\Notifications\\\\Messages\\\\MailMessage;
use Illuminate\\\\Notifications\\\\Notification;

class BookingConfirmed extends Notification
{
    use Queueable;

    public function __construct($booking)
    {
        $this->booking = $booking;
    }

    public function via($notifiable)
    {
        return ['mail'];
    }

    public function toMail($notifiable)
    {
        return (new MailMessage)
                    ->line('Your booking has been confirmed.')
                    ->action('View Booking', url('/bookings/' . $this->booking->id))
                    ->line('Thank you for booking with us!');
    }
}

5. Manajemen Pengguna

Menggunakan Laravel Breeze atau Laravel Fortify untuk fitur registrasi, login, dan profil pengguna.

Contoh Koding untuk Laravel Breeze:

composer require laravel/breeze --dev
php artisan breeze:install
php artisan migrate
npm install && npm run dev

6. Implementasi Queue

Untuk tugas latar belakang seperti pengiriman email konfirmasi booking.

Contoh Koding Queue:

namespace App\\\\Jobs;

use App\\\\Models\\\\Booking;
use App\\\\Notifications\\\\BookingConfirmed;
use Illuminate\\\\Bus\\\\Queueable;
use Illuminate\\\\Contracts\\\\Queue\\\\ShouldQueue;
use Illuminate\\\\Foundation\\\\Bus\\\\Dispatchable;
use Illuminate\\\\Queue\\\\InteractsWithQueue;
use Illuminate\\\\Queue\\\\SerializesModels;

class SendBookingConfirmation implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    protected $booking;

    public function __construct(Booking $booking)
    {
        $this->booking = $booking;
    }

    public function handle()
    {
        $this->booking->user->notify(new BookingConfirmed($this->booking));
    }
}

Dispatch Job:

use App\\\\Jobs\\\\SendBookingConfirmation;

dispatch(new SendBookingConfirmation($booking));

Laravel 11 menyediakan berbagai fitur canggih yang memudahkan pembuatan website sewa mobil mewah yang aman, responsif, dan interaktif. Dengan manajemen kendaraan, sistem pemesanan, pembayaran online, notifikasi, manajemen pengguna, dan implementasi queue, Laravel 11 adalah pilihan yang sangat tepat untuk proyek ini.

Projek Website E-Commerce Menggunakan Laravel 11

Website e-commerce modern memerlukan fitur yang dapat menangani berbagai aspek seperti manajemen produk, keranjang belanja, pembayaran, dan pengiriman. Laravel 11 menyediakan berbagai fitur yang memudahkan pengembangan website e-commerce yang canggih dan responsif.

Fitur Utama Website E-Commerce

  1. Manajemen Produk
    • Pengelolaan data produk seperti deskripsi, harga, dan stok.
  2. Keranjang Belanja
    • Fitur untuk pengguna menambahkan produk ke keranjang dan melakukan checkout.
  3. Pembayaran Online
    • Integrasi dengan payment gateway untuk memproses pembayaran.
  4. Pengelolaan Pesanan
    • Manajemen pesanan pengguna dari proses pemesanan hingga pengiriman.
  5. Manajemen Pengguna
    • Registrasi, login, dan profil pengguna.

Fitur Laravel 11 untuk Website E-Commerce

1. Manajemen Produk

Model Produk:

namespace App\\\\Models;

use Illuminate\\\\Database\\\\Eloquent\\\\Factories\\\\HasFactory;
use Illuminate\\\\Database\\\\Eloquent\\\\Model;

class Product extends Model
{
    use HasFactory

;

    protected $fillable = [
        'name',
        'description',
        'price',
        'stock',
    ];
}

Migration Produk:

use Illuminate\\\\Database\\\\Migrations\\\\Migration;
use Illuminate\\\\Database\\\\Schema\\\\Blueprint;
use Illuminate\\\\Support\\\\Facades\\\\Schema;

class CreateProductsTable extends Migration
{
    public function up()
    {
        Schema::create('products', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->text('description');
            $table->decimal('price', 8, 2);
            $table->integer('stock');
            $table->timestamps();
        });
    }

    public function down()
    {
        Schema::dropIfExists('products');
    }
}

Controller Produk:

namespace App\\\\Http\\\\Controllers;

use App\\\\Models\\\\Product;
use Illuminate\\\\Http\\\\Request;

class ProductController extends Controller
{
    public function index()
    {
        $products = Product::all();
        return view('products.index', compact('products'));
    }

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

    public function store(Request $request)
    {
        $request->validate([
            'name' => 'required',
            'description' => 'required',
            'price' => 'required|numeric',
            'stock' => 'required|integer',
        ]);

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

        return redirect()->route('products.index')
                         ->with('success', 'Product created successfully.');
    }
}

2. Keranjang Belanja

Model Keranjang:

namespace App\\\\Models;

use Illuminate\\\\Database\\\\Eloquent\\\\Factories\\\\HasFactory;
use Illuminate\\\\Database\\\\Eloquent\\\\Model;

class Cart extends Model
{
    use HasFactory;

    protected $fillable = [
        'user_id',
        'product_id',
        'quantity',
    ];
}

Migration Keranjang:

use Illuminate\\\\Database\\\\Migrations\\\\Migration;
use Illuminate\\\\Database\\\\Schema\\\\Blueprint;
use Illuminate\\\\Support\\\\Facades\\\\Schema;

class CreateCartsTable extends Migration
{
    public function up()
    {
        Schema::create('carts', function (Blueprint $table) {
            $table->id();
            $table->foreignId('user_id')->constrained();
            $table->foreignId('product_id')->constrained();
            $table->integer('quantity');
            $table->timestamps();
        });
    }

    public function down()
    {
        Schema::dropIfExists('carts');
    }
}

Controller Keranjang:

namespace App\\\\Http\\\\Controllers;

use App\\\\Models\\\\Cart;
use App\\\\Models\\\\Product;
use Illuminate\\\\Http\\\\Request;
use Illuminate\\\\Support\\\\Facades\\\\Auth;

class CartController extends Controller
{
    public function index()
    {
        $carts = Cart::where('user_id', Auth::id())->get();
        return view('carts.index', compact('carts'));
    }

    public function add(Product $product)
    {
        $cart = Cart::where('user_id', Auth::id())
                    ->where('product_id', $product->id)
                    ->first();

        if ($cart) {
            $cart->quantity++;
            $cart->save();
        } else {
            Cart::create([
                'user_id' => Auth::id(),
                'product_id' => $product->id,
                'quantity' => 1,
            ]);
        }

        return redirect()->route('carts.index')
                         ->with('success', 'Product added to cart.');
    }

    public function remove(Cart $cart)
    {
        $cart->delete();
        return redirect()->route('carts.index')
                         ->with('success', 'Product removed from cart.');
    }
}

3. Pembayaran Online

Mengintegrasikan payment gateway seperti Stripe atau Midtrans untuk memproses pembayaran.

Contoh Koding untuk Stripe:

namespace App\\\\Http\\\\Controllers;

use Illuminate\\\\Http\\\\Request;
use Stripe\\\\Stripe;
use Stripe\\\\Charge;

class PaymentController extends Controller
{
    public function create()
    {
        return view('payments.create');
    }

    public function store(Request $request)
    {
        Stripe::setApiKey(env('STRIPE_SECRET'));

        Charge::create([
            'amount' => $request->amount * 100,
            'currency' => 'usd',
            'description' => 'E-Commerce Payment',
            'source' => $request->stripeToken,
        ]);

        return redirect()->route('payments.success')
                         ->with('success', 'Payment successful.');
    }

    public function success()
    {
        return view('payments.success');
    }
}

4. Pengelolaan Pesanan

Model Pesanan:

namespace App\\\\Models;

use Illuminate\\\\Database\\\\Eloquent\\\\Factories\\\\HasFactory;
use Illuminate\\\\Database\\\\Eloquent\\\\Model;

class Order extends Model
{
    use HasFactory;

    protected $fillable = [
        'user_id',
        'total_amount',
        'status',
    ];
}

Migration Pesanan:

use Illuminate\\\\Database\\\\Migrations\\\\Migration;
use Illuminate\\\\Database\\\\Schema\\\\Blueprint;
use Illuminate\\\\Support\\\\Facades\\\\Schema;

class CreateOrdersTable extends Migration
{
    public function up()
    {
        Schema::create('orders', function (Blueprint $table) {
            $table->id();
            $table->foreignId('user_id')->constrained();
            $table->decimal('total_amount', 8, 2);
            $table->string('status')->default('pending');
            $table->timestamps();
        });
    }

    public function down()
    {
        Schema::dropIfExists('orders');
    }
}

Controller Pesanan:

namespace App\\\\Http\\\\Controllers;

use App\\\\Models\\\\Order;
use App\\\\Models\\\\Cart;
use Illuminate\\\\Http\\\\Request;
use Illuminate\\\\Support\\\\Facades\\\\Auth;

class OrderController extends Controller
{
    public function create()
    {
        $carts = Cart::where('user_id', Auth::id())->get();
        $totalAmount = $carts->sum(function($cart) {
            return $cart->product->price * $cart->quantity;
        });

        return view('orders.create', compact('carts', 'totalAmount'));
    }

    public function store(Request $request)
    {
        $carts = Cart::where('user_id', Auth::id())->get();
        $totalAmount = $carts->sum(function($cart) {
            return $cart->product->price * $cart->quantity;
        });

        $order = Order::create([
            'user_id' => Auth::id(),
            'total_amount' => $totalAmount,
            'status' => 'confirmed',
        ]);

        foreach ($carts as $cart) {
            $order->products()->attach($cart->product_id, ['quantity' => $cart->quantity]);
            $cart->delete();
        }

        return redirect()->route('orders.index')
                         ->with('success', 'Order created successfully.');
    }

    public function index()
    {
        $orders = Order::where('user_id', Auth::id())->get();
        return view('orders.index', compact('orders'));
    }
}

5. Manajemen Pengguna

Menggunakan Laravel Breeze atau Laravel Fortify untuk fitur registrasi, login, dan profil pengguna.

Contoh Koding untuk Laravel Breeze:

composer require laravel/breeze --dev
php artisan breeze:install
php artisan migrate
npm install && npm run dev

6. Implementasi Queue

Untuk tugas latar belakang seperti pengiriman email konfirmasi pesanan.

Contoh Koding Queue:

namespace App\\\\Jobs;

use App\\\\Models\\\\Order;
use App\\\\Notifications\\\\OrderConfirmed;
use Illuminate\\\\Bus\\\\Queueable;
use Illuminate\\\\Contracts\\\\Queue\\\\ShouldQueue;
use Illuminate\\\\Foundation\\\\Bus\\\\Dispatchable;
use Illuminate\\\\Queue\\\\InteractsWithQueue;
use Illuminate\\\\Queue\\\\SerializesModels;

class SendOrderConfirmation implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    protected $order;

    public function __construct(Order $order)
    {
        $this->order = $order;
    }

    public function handle()
    {
        $this->order->user->notify(new OrderConfirmed($this->order));
    }
}

Dispatch Job:

use App\\\\Jobs\\\\SendOrderConfirmation;

dispatch(new SendOrderConfirmation($order));

Dengan menggunakan Laravel 11, membangun website e-commerce modern menjadi lebih mudah dan efisien. Laravel menyediakan berbagai fitur canggih yang mendukung pembuatan website yang aman, responsif, dan interaktif.

Mulai dari manajemen produk, keranjang belanja, pembayaran online, pengelolaan pesanan, hingga manajemen pengguna. Semua fitur ini membuat Laravel 11 menjadi pilihan yang sangat tepat untuk proyek website e-commerce modern.

Saran untuk Programmer Pemula

  1. Pelajari Dasar-Dasar Laravel
    • Sebelum melangkah ke proyek yang lebih kompleks, pastikan Anda memahami dasar-dasar Laravel, seperti routing, controllers, views, dan Eloquent ORM. Dokumentasi Laravel adalah sumber yang sangat bagus untuk memulai.
  2. Buat Proyek Kecil Terlebih Dahulu
    • Mulailah dengan proyek kecil untuk membangun kepercayaan diri dan keterampilan Anda. Proyek kecil seperti blog sederhana atau aplikasi to-do list bisa menjadi latihan yang baik.
  3. Ikuti Tutorial dan Kursus Online
    • Ada banyak tutorial dan kursus online yang tersedia untuk mempelajari Laravel. Memanfaatkan sumber daya ini dapat membantu Anda belajar dengan lebih terstruktur.
  4. Praktek Secara Konsisten
    • Latihan adalah kunci untuk menguasai pemrograman. Cobalah untuk menyisihkan waktu setiap hari untuk berlatih dan mengerjakan proyek Anda.
  5. Bergabung dengan Komunitas
    • Bergabung dengan komunitas developer, baik online maupun offline, dapat memberikan Anda dukungan, tips, dan trik dari sesama developer.
  6. Cari Mentor atau Bergabung dengan Program Belajar Terstruktur
    • Belajar dari mentor yang berpengalaman dapat mempercepat proses belajar Anda. Mentor dapat memberikan umpan balik konstruktif dan membantu Anda mengatasi hambatan yang mungkin Anda hadapi.

Belajar dari Mentor Expert Buildwithangga

Jika Anda mencari mentor yang berpengalaman dan program belajar yang terstruktur, Buildwithangga adalah pilihan yang sangat baik. Berikut adalah beberapa keuntungan belajar di Buildwithangga:

  • Akses Seumur Hidup
    • Dengan mendaftar di Buildwithangga, Anda mendapatkan akses seumur hidup ke semua kursus yang Anda ambil. Ini berarti Anda dapat belajar sesuai kecepatan Anda sendiri dan mengulang materi kapan saja Anda butuhkan.
  • Visual Design Berkualitas Tinggi
    • Buildwithangga dikenal dengan visual design yang berkualitas tinggi. Materi yang disajikan tidak hanya informatif tetapi juga menarik secara visual, sehingga memudahkan pemahaman konsep-konsep yang diajarkan.
  • Portofolio Siap Kerja
    • Kursus di Buildwithangga dirancang untuk membantu Anda membangun portofolio yang siap untuk dunia kerja. Anda akan belajar dengan mengerjakan proyek nyata yang bisa Anda tunjukkan kepada calon pemberi kerja.

Dengan memanfaatkan sumber daya yang tersedia di Buildwithangga, Anda bisa mendapatkan bimbingan dari mentor expert, belajar dengan materi berkualitas tinggi, dan membangun portofolio yang solid. Semua ini akan membantu Anda menjadi developer yang kompeten dan siap untuk tantangan di dunia kerja.

Maka, jangan ragu untuk mulai belajar dan mengembangkan keterampilan Anda dengan Buildwithangga. Selamat belajar dan semoga sukses dalam perjalanan Anda menjadi developer profesional!