Laravel 11 Driver & Booking System

එකම පිටුවකින් සම්පූර්ණ යෙදුමක් ගොඩනගමු (සිංහල පැහැදිලි කිරීම් සහිතව) 🇱🇰

ස්ථාපනයට පෙර (Prerequisites)

ව්‍යාපෘතිය ආරම්භ කිරීමට පෙර, ඔබගේ පරිගණකයේ මෙම මෘදුකාංග ස්ථාපනය කර තිබිය යුතුය.

  • 1. XAMPP: අපට අවශ්‍ය Apache (Web Server), PHP, සහ MySQL (Database) ලබා දේ. Download XAMPP
  • 2. Composer: PHP projects සඳහා අවශ්‍ය packages (libraries) කළමනාකරණය කරයි. Download Composer
  • 3. Node.js & NPM: Frontend (CSS/JS) සඳහා අවශ්‍ය වේ. Download Node.js
  • 4. Code Editor: VS Code නිර්දේශ කෙරේ. Download VS Code

පියවර 1: ව්‍යාපෘතිය සකස් කිරීම (Project Setup)

1.1 - Create Laravel Project
සිංහලෙන්: මෙම විධානය මගින් 'car-booking-system' නමින් නව Laravel project එකක් නිර්මාණය කරයි.
composer create-project laravel/laravel car-booking-system
1.2 - Configure Database (.env)
සිංහලෙන්: phpMyAdmin හි `car_booking_db` නමින් database එකක් සාදා, project එකේ `.env` ගොනුවට එම නම සහ ඔබගේ MySQL username/password එක ලබා දෙන්න.
DB_DATABASE=car_booking_db
DB_USERNAME=root
DB_PASSWORD=
1.3 - Start the Server
සිංහලෙන්: Project ෆෝල්ඩරය තුලට ගොස්, Laravel development server එක ආරම්භ කරන්න. ඉන්පසු browser එකෙන් `http://127.0.0.1:8000` වෙත පිවිසෙන්න.
cd car-booking-system
php artisan serve

පියවර 2: දත්ත සමුදාය නිර්මාණය (Database Migrations)

2.1 - Create Migration Files
සිංහලෙන්: Database tables වල ව්‍යුහය අර්ථ දැක්වීමට අවශ්‍ය PHP files (migrations) සෑදීමට මෙම විධාන භාවිතා කරන්න.
php artisan make:migration create_drivers_table
php artisan make:migration create_customers_table
php artisan make:migration create_bookings_table
2.2 - Define Table Schema
සිංහලෙන්: `database/migrations/` හි ඇති ගොනු වල `up()` function එක තුල, table එකට අවශ්‍ය තීරු (columns) සහ ඒවායේ වර්ග (string, integer, etc.) අර්ථ දක්වන්න.
// create_drivers_table.php
public function up(): void
{
    Schema::create('drivers', function (Blueprint $table) {
        $table->id(); // Auto-incrementing ID
        $table->string('name'); // Driver's name
        $table->string('phone')->unique(); // Unique phone number
        $table->string('national_id')->unique(); // Unique NIC
        $table->string('vehicle_type'); // e.g., Car, Van
        $table->string('vehicle_id')->unique(); // License Plate
        $table->timestamps(); // created_at and updated_at
    });
}
2.3 - Run Migrations
සිංහලෙන්: මෙම විධානය මගින් ඔබ අර්ථ දැක්වූ සියලුම tables, database එක තුල නිර්මාණය කරයි.
php artisan migrate

අවසාන ෆෝල්ඩර් ව්‍යුහය (Final Folder Structure)

පාඨමාලාව අවසානයේ, අපගේ යෙදුමේ ප්‍රධාන ගොනු සහ ෆෝල්ඩර මෙසේ දිස්වනු ඇත.

car-booking-system/
├── app/
│   ├── Http/
│   │   ├── Controllers/  // Logic මෙතන
│   │   │   ├── DriverController.php
│   │   │   └── AdminController.php
│   │   └── Middleware/
│   │       └── IsAdminMiddleware.php
│   └── Models/             // Database සබඳතා
│       ├── Driver.php
│       └── User.php
├── database/
│   └── migrations/       // Table ව්‍යුහය
├── resources/
│   └── views/            // HTML (Blade files) මෙතන
│       ├── drivers/
│       │   └── create.blade.php
│       └── layouts/
│           └── app.blade.php
└── routes/
    └── web.php             // URL මෙතන

පියවර 4: රියදුරු ලියාපදිංචිය (Driver Registration)

4.1 - Define Routes (routes/web.php)
සිංහලෙන්: Form එක පෙන්වීමට (GET) සහ දත්ත භාරගැනීමට (POST) අවශ්‍ය URL මාර්ග දෙක නිර්වචනය කරන්න.
use App\Http\Controllers\DriverController;

Route::get('/drivers/create', [DriverController::class, 'create']);
Route::post('/drivers', [DriverController::class, 'store']);
4.2 - Create Controller & Logic
සිංහලෙන්: `DriverController` එක සාදා, එහි `store` function එක තුල දත්ත validate කර, `Driver` model එක හරහා database එකට save කරන්න.
// DriverController.php
use Illuminate\Http\Request;
use App\Models\Driver;

public function store(Request $request)
{
    // 1. Validate: දත්ත නිවැරදිදැයි පරීක්ෂා කරන්න
    $validatedData = $request->validate([
        'name' => 'required|string|max:255',
        'phone' => 'required|string|unique:drivers',
        'national_id' => 'required|string|unique:drivers',
    ]);

    // 2. Save: දත්ත database එකට save කරන්න
    Driver::create($validatedData);

    // 3. Redirect: සාර්ථක පණිවිඩයක් සමඟින් redirect කරන්න
    return redirect('/')->with('success', 'Driver registered!');
}

පියවර 5: පරිපාලන පැනලය (Admin Panel)

5.1 - Create Admin Middleware
සිංහලෙන්: Middleware යනු request එකක් Controller එකට යාමට පෙර ක්‍රියාත්මක වන filter එකකි. Admin routes වලට පිවිසෙන්නේ admin වරුන්දැයි පරීක්ෂා කිරීමට මෙය සාදමු.
php artisan make:middleware IsAdminMiddleware
5.2 - Add Logic to Middleware
සිංහලෙන්: `IsAdminMiddleware.php` ගොනුවේ, login වූ user ගේ `is_admin` අගය `true` දැයි පරීක්ෂා කරන්න. (මීට පෙර `users` table එකට `is_admin` column එකක් එක් කරන්න).
public function handle(Request $request, Closure $next)
{
    if (auth()->check() && auth()->user()->is_admin) {
        return $next($request); // User is admin, continue
    }
    return redirect('/'); // Not an admin, redirect
}
5.3 - Protect Routes
සිංහලෙන්: `routes/web.php` හි, admin routes සියල්ල `group` එකක් තුලට දමා, අප සෑදූ middleware එක යොදන්න.
Route::middleware(['auth', 'is_admin'])->group(function () {
    Route::get('/admin/dashboard', [AdminController::class, 'dashboard']);
});