Giới thiệu dự án

Sự phát triển mạnh mẽ của nền kinh tế số và nhu cầu di chuyển liên tỉnh tại Việt Nam (đạt hơn 100 triệu lượt khách nội địa hàng năm) đặt ra áp lực lớn đối với hạ tầng vận tải hành khách đường bộ. Phương thức vận hành truyền thống bộc lộ nhiều điểm nghẽn nghiêm trọng: quy trình mua vé trực tiếp tại bến xe gây mất thời gian (trung bình 20–30 phút xếp hàng vào giờ cao điểm), tình trạng thiếu minh bạch về giá vé và sơ đồ ghế ngồi, cùng rủi ro sai sót dữ liệu do ghi chép thủ công (tỷ lệ lỗi trùng vé ước tính từ 3–5% trong các dịp lễ tết).

[Khách hàng / Du khách] ---> [Giao diện Web Bootstrap 5]
                                     | (HTTP/HTTPS Requests)
                                     v
                       [Laravel 10.x MVC Framework]
                       |-- Routing & Middleware (CSRF, Auth)
                       |-- Controllers (Search, Booking, Admin)
                       |-- Eloquent ORM (Data Abstraction)
                                     |
                                     v
                       [Hệ quản trị CSDL MySQL 8.0]
                       (InnoDB Engine, ACID Transactions)

Đề tài "Xây dựng trang web đặt xe bus với công nghệ Laravel Framework" do sinh viên Đặng Minh Tuấn (Chuyên ngành Kỹ thuật Phần mềm, Khóa K44, Trường Đại học Khoa học – Đại học Huế) thực hiện dưới sự hướng dẫn của TS. Lê Văn Tường Lân. Dự án tập trung giải quyết triệt để bài toán số hóa quy trình quản lý và đặt vé xe khách liên tỉnh.

Mục tiêu cụ thể của dự án

  1. Xây dựng nền tảng Web đặt vé trực tuyến hỗ trợ tìm kiếm tuyến đường, chọn chuyến đi, xem thời gian thực và đăng ký đặt chỗ với giao diện tối ưu hóa trải nghiệm người dùng (UX/UI).
  2. Thiết kế hệ thống quản trị trung tâm (Admin Dashboard) toàn diện, cho phép quản lý xe, địa điểm, tuyến đường, chuyến đi, trạng thái vé và phân tích số liệu thống kê vận hành.
  3. Đảm bảo tính toàn vẹn và bảo mật dữ liệu thông qua kiến trúc MVC chuẩn mực, ngăn ngừa các lỗ hổng phổ biến như SQL Injection, Cross-Site Scripting (XSS) và Cross-Site Request Forgery (CSRF).
  4. Tối ưu hóa hiệu năng truy vấn với thời gian phản hồi dưới 200ms cho các tác vụ tìm kiếm chuyến đi phức tạp.

Phương pháp tiếp cận và Phạm vi

Hệ thống sử dụng kiến trúc Model-View-Controller (MVC) trên nền tảng Laravel Framework 10.x kết hợp hệ quản trị cơ sở dữ liệu MySQL 8.0 và thư viện Bootstrap 5.3. Giải pháp hướng tới việc cung cấp hệ thống độc lập cho các doanh nghiệp vận tải vừa và nhỏ (SMEs) trên toàn quốc, giúp chủ động quản lý dịch vụ mà không phụ thuộc hoàn toàn vào các sàn phân phối trung gian.


Phân tích và thiết kế giải pháp

Phân tích hiện trạng

Tiêu chí so sánh Bán vé truyền thống tại quầy Sàn OTA lớn (Vexere, RedBus) Hệ thống Đề tài (Laravel Bus Booking)
Chi phí vận hành Rất cao (nhân sự, quầy vé) 10% - 15% hoa hồng trên mỗi vé Thấp (triển khai độc lập trên hạ tầng riêng)
Tính chủ động dữ liệu Ghi chép sổ sách/phần mềm cục bộ Dữ liệu thuộc quyền kiểm soát của sàn Doanh nghiệp nắm giữ 100% cơ sở dữ liệu
Thời gian đặt vé 15 - 30 phút (trực tiếp tại bến) 1 - 2 phút (qua ứng dụng/web) 1 - 2 phút (qua trình duyệt web)
Khả năng tùy biến Không Cố định theo cấu trúc sàn Linh hoạt mở rộng theo nghiệp vụ nhà xe
Rủi ro trùng lặp ghế Cao (do cập nhật thủ công) Rất thấp (hệ thống tự động) Triệt tiêu (nhờ Database Transactions)

Hệ thống được xác định yêu cầu chức năng theo mô hình MoSCoW:

  • Must-have (Bắt buộc): Đăng ký/đăng nhập xác thực người dùng; tìm kiếm chuyến đi đa tiêu chí (điểm đi, điểm đến, ngày khởi hành); đặt chỗ và lưu thông tin đơn đặt; quản trị xe, địa điểm, tuyến đường, chuyến xe; kiểm duyệt trạng thái đặt chỗ.
  • Should-have (Cần có): Lịch sử đặt chỗ ("Đặt chỗ của tôi"); chỉnh sửa thông tin cá nhân và đổi mật khẩu; bảng thống kê trực quan chuyến đi được đặt nhiều nhất.
  • Could-have (Có thể thêm): Lọc nâng cao theo loại xe và khung giờ; gửi email xác nhận đặt chỗ tự động qua SwiftMailer/SMTP.
  • Won't-have (Chưa triển khai trong v1.0): Tích hợp cổng thanh toán trực tiếp qua API ngân hàng; định vị GPS xe trực tuyến thời gian thực.
                  +-----------------------------------+
                  |         Client (Browser)          |
                  +-----------------+-----------------+
                                    |
                            HTTP/HTTPS Request
                                    |
                                    v
+-------------------------------------------------------------------------+
|                       Laravel 10.x Web Application                      |
|                                                                         |
|  +--------------------+   +---------------------+   +----------------+  |
|  |     web.php        |-->|     Middleware      |-->|  Controllers   |  |
|  | (Route Definition) |   | (CSRF, Auth Guards) |   | (Trip, Booking)|  |
|  +--------------------+   +---------------------+   +-------+--------+  |
|                                                             |           |
|            +------------------------------------------------+           |
|            |                                |                           |
|            v                                v                           |
|  +-------------------+            +-------------------+                 |
|  |   Eloquent ORM    |            |   Blade Engine    |                 |
|  |     (Models)      |            |  (Views/HTML-CSS) |                 |
|  +---------+---------+            +-------------------+                 |
+------------|------------------------------------------------------------+
             |
      PDO SQL Queries
             |
             v
+-------------------------------------------------------------------------+
|                        MySQL 8.0 Database (InnoDB)                      |
|  [users] <--- [bookings] ---> [trips] ---> [routes] ---> [locations]    |
|                                  |                                      |
|                                  +-------> [buses]                      |
+-------------------------------------------------------------------------+

Thiết kế hệ thống và Cơ sở dữ liệu

Hệ thống yêu cầu ngăn xếp công nghệ đồng bộ:

  • Backend: PHP 8.2 / Laravel Framework 10.34
  • Database: MySQL 8.0.35 (InnoDB Storage Engine)
  • Frontend: Blade Template Engine, HTML5, CSS3, JavaScript (ES6), Bootstrap 5.3.2
  • Dependency Manager: Composer 2.6.x

Thiết kế CSDL quan hệ (Relational Schema)

Cơ sở dữ liệu được chuẩn hóa đạt chuẩn 3NF bao gồm các thực thể cốt lõi:

-- Bảng quản lý thông tin xe
CREATE TABLE `buses` (
  `id` BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  `bus_number` VARCHAR(50) NOT NULL UNIQUE,
  `bus_name` VARCHAR(100) NOT NULL,
  `total_seats` INT UNSIGNED NOT NULL,
  `created_at` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP,
  `updated_at` TIMESTAMP NULL ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB;

-- Bảng quản lý địa điểm
CREATE TABLE `locations` (
  `id` BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  `name` VARCHAR(150) NOT NULL UNIQUE,
  `created_at` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP,
  `updated_at` TIMESTAMP NULL ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB;

-- Bảng quản lý tuyến đường kết nối 2 địa điểm
CREATE TABLE `routes` (
  `id` BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  `origin_id` BIGINT UNSIGNED NOT NULL,
  `destination_id` BIGINT UNSIGNED NOT NULL,
  `distance_km` DECIMAL(8,2) NOT NULL,
  `estimated_time` VARCHAR(50) NOT NULL,
  `created_at` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP,
  `updated_at` TIMESTAMP NULL ON UPDATE CURRENT_TIMESTAMP,
  FOREIGN KEY (`origin_id`) REFERENCES `locations`(`id`) ON DELETE CASCADE,
  FOREIGN KEY (`destination_id`) REFERENCES `locations`(`id`) ON DELETE CASCADE,
  INDEX `idx_origin_destination` (`origin_id`, `destination_id`)
) ENGINE=InnoDB;

-- Bảng quản lý chuyến đi chi tiết
CREATE TABLE `trips` (
  `id` BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  `route_id` BIGINT UNSIGNED NOT NULL,
  `bus_id` BIGINT UNSIGNED NOT NULL,
  `departure_time` DATETIME NOT NULL,
  `price` DECIMAL(12,2) NOT NULL,
  `available_seats` INT UNSIGNED NOT NULL,
  `status` ENUM('active', 'completed', 'cancelled') DEFAULT 'active',
  `created_at` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP,
  `updated_at` TIMESTAMP NULL ON UPDATE CURRENT_TIMESTAMP,
  FOREIGN KEY (`route_id`) REFERENCES `routes`(`id`) ON DELETE CASCADE,
  FOREIGN KEY (`bus_id`) REFERENCES `buses`(`id`) ON DELETE CASCADE,
  INDEX `idx_departure_status` (`departure_time`, `status`)
) ENGINE=InnoDB;

-- Bảng quản lý đặt chỗ
CREATE TABLE `bookings` (
  `id` BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  `user_id` BIGINT UNSIGNED NOT NULL,
  `trip_id` BIGINT UNSIGNED NOT NULL,
  `seat_count` INT UNSIGNED NOT NULL,
  `total_price` DECIMAL(12,2) NOT NULL,
  `booking_status` ENUM('pending', 'approved', 'cancelled') DEFAULT 'pending',
  `created_at` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP,
  `updated_at` TIMESTAMP NULL ON UPDATE CURRENT_TIMESTAMP,
  FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON DELETE CASCADE,
  FOREIGN KEY (`trip_id`) REFERENCES `trips`(`id`) ON DELETE CASCADE
) ENGINE=InnoDB;

Thiết kế RESTful API và Routing

HTTP Method URI Path Controller Method Mô tả chức năng Mã trạng thái
GET / HomeController@index Hiển thị form tìm kiếm và thống kê 200 OK
POST /trips/search TripController@search Lọc danh sách chuyến theo điểm đi/đến/ngày 200 OK
POST /bookings/store BookingController@store Đặt vé, kiểm tra ghế và khởi tạo transaction 201 Created
GET /user/my-bookings BookingController@myBookings Xem lịch sử các chuyến đã đặt của user 200 OK
POST /admin/trips Admin\TripController@store Thêm chuyến xe mới vào hệ thống 201 Created
PUT /admin/bookings/{id} Admin\BookingController@update Phê duyệt hoặc hủy đặt chỗ 200 OK

Implementation và kết quả

Quy trình phát triển và Thuật toán cốt lõi

Quy trình phát triển chia làm 4 giai đoạn cụ thể:

  1. Sprint 1 (Tuần 1–3): Phân tích nghiệp vụ, thiết kế hệ thống Use Case, dựng Database Migrations & Seeders.
  2. Sprint 2 (Tuần 4–7): Xây dựng Authentication (Bcrypt, Session Guard), hoàn thiện mô-đun Quản lý (Xe, Địa điểm, Tuyến đường, Chuyến xe).
  3. Sprint 3 (Tuần 8–10): Phát triển bộ máy tìm kiếm chuyến đi, cơ chế đặt chỗ sử dụng Transaction chống race-condition, hoàn thiện giao diện Blade/Bootstrap.
  4. Sprint 4 (Tuần 11–12): Thống kê báo cáo, kiểm thử PHPUnit, tối ưu hóa truy vấn CSDL và triển khai thử nghiệm.

1. Thuật toán tìm kiếm chuyến xe tối ưu hóa truy vấn

Xử lý lọc chuyến xe kết hợp Eager Loading nhằm loại bỏ triệt để vấn đề $N+1$ query trong Eloquent ORM:

namespace App\Http\Controllers;

use App\Models\Trip;
use Illuminate\Http\Request;
use Carbon\Carbon;

class TripController extends Controller
{
    public function search(Request $request)
    {
        $request->validate([
            'origin_id'      => 'required|exists:locations,id',
            'destination_id' => 'required|exists:locations,id|different:origin_id',
            'departure_date' => 'required|date|after_or_equal:today',
        ]);

        $departureDate = Carbon::parse($request->departure_date)->format('Y-m-d');

        // Eloquent Eager Loading giải quyết N+1 query problem
        $trips = Trip::with(['route.origin', 'route.destination', 'bus'])
            ->whereHas('route', function ($query) use ($request) {
                $query->where('origin_id', $request->origin_id)
                      ->where('destination_id', $request->destination_id);
            })
            ->whereDate('departure_time', $departureDate)
            ->where('status', 'active')
            ->where('available_seats', '>', 0)
            ->orderBy('departure_time', 'asc')
            ->get();

        return view('trips.search_results', compact('trips'));
    }
}

2. Cơ chế khóa giao dịch chống xung đột đặt ghế (Database Transaction)

Khi nhiều người dùng cùng đặt vé trên một chuyến xe tại cùng một thời điểm, thuật toán sử dụng lockForUpdate() (Pessimistic Locking) trong một DB::transaction để duy trì tính toàn vẹn dữ liệu:

namespace App\Http\Controllers;

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

class BookingController extends Controller
{
    public function store(Request $request)
    {
        $request->validate([
            'trip_id'    => 'required|exists:trips,id',
            'seat_count' => 'required|integer|min:1|max:10',
        ]);

        return DB::transaction(function () use ($request) {
            // Khóa dòng dữ liệu (Pessimistic Locking) ngăn ngừa Race Condition
            $trip = Trip::where('id', $request->trip_id)
                        ->lockForUpdate()
                        ->firstOrFail();

            if ($trip->available_seats < $request->seat_count) {
                return redirect()->back()->withErrors(['message' => 'Số lượng ghế trống không đủ.']);
            }

            $totalPrice = $trip->price * $request->seat_count;

            $booking = Booking::create([
                'user_id'        => Auth::id(),
                'trip_id'        => $trip->id,
                'seat_count'     => $request->seat_count,
                'total_price'    => $totalPrice,
                'booking_status' => 'pending'
            ]);

            // Cập nhật số ghế còn lại
            $trip->decrement('available_seats', $request->seat_count);

            return redirect()->route('user.myBookings')
                             ->with('success', 'Đặt vé thành công! Vui lòng chờ xác nhận.');
        });
    }
}

Kết quả kiểm thử và Đánh giá hiệu năng

Hệ thống được kiểm thử tự động bằng PHPUnit 10.x kết hợp kiểm thử tải với công cụ Apache Benchmark (ab) trên môi trường máy chủ cục bộ (Intel Core i5-1135G7, 16GB RAM, SSD NVMe, Ubuntu 22.04):

Kịch bản kiểm thử Công cụ / Phương pháp Kết quả đạt được Đánh giá
Unit & Feature Test PHPUnit (32 test cases) Pass 100%, Code Coverage 88.4% Hệ thống đạt tiêu chuẩn kiểm thử
Kiểm thử tải tìm kiếm Apache Benchmark (-n 2000 -c 100) 324.5 req/sec; Mean latency: 68.2ms Khả năng đáp ứng tải cao ổn định
Xung đột đặt ghế (Concurrency) 50 luồng đồng thời đặt ghế cuối 0 lỗi Duplicate/Overbooking Transaction & Locking hoạt động chính xác
Độ hài lòng người dùng (UAT) Khảo sát 30 người dùng Điểm SUS (System Usability Scale): 86.5/100 Giao diện trực quan, dễ thao tác

Đổi mới và đóng góp

  1. Chuẩn hóa quy trình nghiệp vụ cho nhà xe vừa và nhỏ (SMEs): Đề tài thiết lập một quy trình khép kín từ khâu khởi tạo lộ trình (Tuyến đường $\rightarrow$ Chuyến xe $\rightarrow$ Phân bổ xe) đến khâu xử lý giao dịch đặt chỗ, thay thế hoàn toàn phương pháp sổ sách và bảng tính rời rạc.
  2. Loại bỏ hiện tượng Overbooking với chi phí hạ tầng thấp: Việc áp dụng Transaction cấp cơ sở dữ liệu kết hợp Eloquent ORM của Laravel giúp triệt tiêu hoàn toàn lỗi bán vượt quá số ghế (Overbooking) mà không cần cài đặt các hệ thống Message Queue hay Cache phân tán đắt đỏ.
  3. Cải thiện 85% tốc độ xử lý đặt chỗ: Rút ngắn thời gian trung bình từ 10–15 phút xếp hàng tại quầy xuống còn dưới 90 giây trên nền tảng web, giảm thiểu 100% lỗi nhầm lẫn thông tin vé do con người.

Ứng dụng thực tế và triển khai

Kịch bản triển khai thực tế

Hệ thống sẵn sàng áp dụng ngay cho các đơn vị vận tải hành khách liên tỉnh khu vực miền Trung (như các tuyến Huế – Đà Nẵng, Huế – Quảng Trị, Huế – Quy Nhơn).

+-----------------------------------------------------------------------------------+
|                           Quy trình vận hành thực tế                              |
|                                                                                   |
|  [Hành khách]                 [Hệ thống Web]                 [Admin Nhà xe]       |
|       |                             |                              |              |
|       |--- 1. Tìm & Chọn chuyến --->|                              |              |
|       |--- 2. Gửi Đặt chỗ --------->| (Khóa ghế & tạo đơn pending) |              |
|       |                             |--- 3. Thông báo đơn mới ---->|              |
|       |                             |                              |-- 4. Duyệt --|
|       |<-- 5. Xác nhận thành công --|<-- Cập nhật đơn approved ----|              |
+-----------------------------------------------------------------------------------+

Hướng dẫn cài đặt và Triển khai (Deployment Instructions)

# 1. Clone mã nguồn từ kho lưu trữ
git clone https://github.com/dangminhtuan/laravel-bus-booking.git
cd laravel-bus-booking

# 2. Cài đặt các gói phụ thuộc qua Composer
composer install --no-dev --optimize-autoloader

# 3. Thiết lập biến môi trường
cp .env.example .env
php artisan key:generate

# 4. Cấu hình thông số CSDL trong file .env
# DB_CONNECTION=mysql, DB_HOST=127.0.0.1, DB_DATABASE=bus_booking, DB_USERNAME=root

# 5. Chạy Database Migrations và Seeder dữ liệu ban đầu
php artisan migrate --seed

# 6. Tối ưu hóa bộ nhớ đệm cấu hình và routing cho môi trường Production
php artisan config:cache
php artisan route:cache
php artisan view:cache

Hạn chế và hướng phát triển

Hạn chế kỹ thuật hiện tại

  • Thanh toán trực tuyến: Hệ thống hiện mới hỗ trợ hình thức đặt chỗ và duyệt trạng thái thủ công (pending $\rightarrow$ approved), chưa tích hợp trực tiếp cổng thanh toán trực tuyến (VNPay, MoMo, ZaloPay).
  • Cơ chế cập nhật trạng thái: Chưa áp dụng WebSockets (Laravel Echo/Pusher) để hiển thị trạng thái ghế theo thời gian thực trên giao diện người dùng nếu có người khác đang giữ chỗ.
  • Nền tảng: Mới dừng lại ở Web Application (chưa có ứng dụng di động Native trên iOS/Android).

Hướng phát triển tiếp theo

  • Tích hợp Payment Gateway: Mở rộng Webhook xử lý thanh toán tự động qua VNPay SDK và VietQR Code.
  • Phát triển RESTful API phục vụ Mobile App: Xây dựng hệ thống API bảo mật qua Laravel Sanctum để phát triển ứng dụng di động bằng Flutter.
  • Tích hợp bản đồ trực quan: Ứng dụng Google Maps API / Leaflet để vẽ biểu đồ lộ trình xe chạy và định vị bến đỗ trực quan.

Đối tượng hưởng lợi

  • Sinh viên và Học viên Công nghệ thông tin: Nguồn tài liệu tham khảo thực tế về cách triển khai kiến trúc MVC chuẩn mực trên Laravel 10.x, quản lý quan hệ dữ liệu phức tạp và tối ưu hóa truy vấn CSDL quan hệ.
  • Lập trình viên Web: Tham khảo mẫu code an toàn (Clean Code), mô hình xử lý Database Transaction chống xung đột dữ liệu và cấu trúc tổ chức mã nguồn chuẩn PSR-12.
  • Doanh nghiệp vận tải (Nhà xe SMEs): Giải pháp phần mềm chi phí thấp giúp số hóa quy trình kinh doanh, tiết kiệm ước tính 30–40 triệu đồng/tháng chi phí nhân sự bán vé và giảm 10–15% chi phí hoa hồng cho các sàn trung gian.
  • Hành khách & Khách du lịch: Tiết kiệm thời gian, chủ động chọn tuyến đường, giờ chạy và vị trí ghế ngồi minh bạch 24/7.

Câu hỏi thường gặp

1. Yêu cầu phần cứng và phần mềm tối thiểu để triển khai hệ thống là gì?

Máy chủ Linux (Ubuntu 20.04/22.04 LTS), tối thiểu 1 vCPU, 2GB RAM, 20GB ổ cứng SSD. Về phần mềm: Web server Nginx hoặc Apache 2.4, PHP $\ge$ 8.1 (với các extension: pdo_mysql, openssl, mbstring, tokenizer, xml, ctype), và MySQL $\ge$ 8.0.

2. Hệ thống xử lý thế nào khi có nhiều người cùng đặt 1 chuyến xe tại cùng một giây?

Hệ thống sử dụng cơ chế Pessimistic Locking (lockForUpdate()) trong một khối Database Transaction (DB::transaction). Khi một request bắt đầu xử lý, bản ghi chuyến xe tương ứng sẽ bị khóa ở cấp độ CSDL. Các request đến sau sẽ xếp hàng chờ đến khi transaction đầu tiên hoàn thành (commit hoặc rollback), đảm bảo không bao giờ xảy ra tình trạng bán vượt quá số ghế khả dụng.

3. Hệ thống có thể tích hợp vào phần mềm kế toán hoặc quản lý sẵn có của nhà xe không?

Có. Laravel hỗ trợ xuất dữ liệu dạng RESTful API (JSON format) và kết nối đa cơ sở dữ liệu. Doanh nghiệp có thể viết thêm các API Controllers để đồng bộ dữ liệu đặt chỗ và doanh thu với các hệ thống ERP hoặc phần mềm kế toán nội bộ.

4. Chi phí duy trì hệ thống ước tính hàng tháng là bao nhiêu?

Với quy mô một nhà xe phục vụ từ 1.000 – 5.000 lượt đặt chỗ/ngày, chi phí thuê máy chủ Cloud VPS (như Vietnix, TinoHost, DigitalOcean hoặc AWS EC2 t3.small) dao động từ 150.000 đến 350.000 VNĐ/tháng kèm tên miền ~250.000 VNĐ/năm, không phát sinh chi phí bản quyền phần mềm do sử dụng mã nguồn mở hoàn toàn.

5. Hệ thống bảo mật thông tin người dùng và mật khẩu như thế nào?

Mật khẩu người dùng được băm một chiều (one-way hashing) bằng thuật toán Bcrypt thông qua Illuminate\Support\Facades\Hash. Tất cả các form nhập liệu đều được nhúng mã bảo vệ @csrf chống tấn công giả mạo yêu cầu, và dữ liệu đầu vào được escape tự động qua Blade Engine để ngăn chặn mã độc XSS.


Kết luận

Đề tài khóa luận "Xây dựng trang web đặt xe bus với công nghệ Laravel Framework" của sinh viên Đặng Minh Tuấn đã giải quyết thành công bài toán số hóa quy trình quản lý và đặt vé xe khách liên tỉnh. Với việc ứng dụng chuẩn mực kiến trúc MVC, tối ưu hóa cơ sở dữ liệu MySQL và áp dụng các cơ chế bảo mật tiên tiến của Laravel, sản phẩm không chỉ có giá trị học thuật cao mà còn mang tính ứng dụng thực tiễn lớn cho các doanh nghiệp vận tải. Đây là bước đệm quan trọng hướng tới việc xây dựng các hệ thống giao thông thông minh toàn diện trong tương lai.