Tạo bởi Trần Văn Điêp|
Học Laravel

[Video] Lập trình Laravel - Truyền dữ liệu từ Controller qua View - Ví dụ Hello World trong Laravel Phần 1

Lập trình Laravel - Truyền dữ liệu từ Controller qua View - Ví dụ Hello World trong Laravel Phần 1


Mở bài

Laravel là một trong những framework PHP mạnh mẽ và phổ biến nhất hiện nay, được hàng triệu lập trình viên trên toàn thế giới tin dùng. Điểm nổi bật của Laravel không chỉ ở cấu trúc gọn gàng, dễ bảo trì mà còn ở cách nó giúp developer viết code “thanh thoát”, dễ hiểu và cực kỳ logic. Trong hành trình học lập trình Laravel, một trong những bước cơ bản và quan trọng nhất chính là hiểu cách truyền dữ liệu từ Controller sang View — bước nền tảng để xây dựng bất kỳ ứng dụng web động nào.

Nếu bạn mới bắt đầu, có thể đang băn khoăn: “Làm sao để gửi dữ liệu từ Controller ra View?”, “Cơ chế hoạt động của Route - Controller - View trong Laravel như thế nào?”. Đừng lo! Trong bài viết này, chúng ta sẽ cùng nhau khám phá từng bước một cách chi tiết, qua ví dụ thực tế “Hello World” – một trong những bài học kinh điển nhưng cực kỳ hữu ích.

Bài viết không chỉ giúp bạn hiểu rõ cách truyền dữ liệu từ Controller qua View trong Laravel, mà còn giúp bạn nắm chắc luồng xử lý MVC (Model – View – Controller) của Laravel, qua đó tạo nền tảng vững chắc để phát triển các ứng dụng web chuyên nghiệp hơn ở các phần sau.


Giới thiệu tổng quan về mô hình MVC trong Laravel

Trước khi đi sâu vào phần truyền dữ liệu, chúng ta cần hiểu Laravel hoạt động dựa trên mô hình MVC. Đây là kiến trúc chuẩn được áp dụng trong hầu hết các framework web hiện đại.

  • Model (M): Là nơi xử lý dữ liệu và tương tác với cơ sở dữ liệu (Database).

  • View (V): Là phần giao diện hiển thị cho người dùng.

  • Controller (C): Là “cầu nối” trung gian giữa Model và View, nơi xử lý logic của ứng dụng.

Cụ thể hơn, khi người dùng truy cập vào một URL trên trình duyệt:

  1. Route tiếp nhận yêu cầu (request).

  2. Controller xử lý logic, lấy dữ liệu (từ Model hoặc tự tạo).

  3. View hiển thị dữ liệu đó ra giao diện cho người dùng.

Laravel giúp quá trình này trở nên cực kỳ dễ dàng, gọn gàng và rõ ràng. Giờ hãy bắt đầu với ví dụ đầu tiên — Hello World.


Tạo Route cơ bản trong Laravel

Đầu tiên, hãy mở file routes/web.php trong dự án Laravel của bạn. Đây là nơi khai báo tất cả các route dành cho giao diện web.

Ví dụ đơn giản nhất để hiển thị “Hello World” mà không cần Controller:

// routes/web.php use Illuminate\Support\Facades\Route; Route::get('/hello', function () { return "Hello World from Laravel!"; });

Giải thích:

  • Route::get('/hello', ...) nghĩa là khi người dùng truy cập vào đường dẫn http://localhost:8000/hello, Laravel sẽ thực thi đoạn code bên trong.

  • Lúc này, Laravel trả về trực tiếp chuỗi "Hello World from Laravel!" ra trình duyệt.

Tuy nhiên, trong thực tế, ta hiếm khi viết logic trực tiếp trong file route. Thay vào đó, ta sẽ tách riêng phần xử lý sang Controller — giúp code dễ bảo trì, mở rộng và tái sử dụng.


Tạo Controller để xử lý logic

Laravel cho phép bạn tạo Controller cực kỳ dễ dàng bằng artisan command. Mở terminal và chạy lệnh sau:

php artisan make:controller HelloController

Sau khi chạy, Laravel sẽ tạo file HelloController.php trong thư mục app/Http/Controllers/.

Mở file này, bạn sẽ thấy cấu trúc như sau:

<?php namespace App\Http\Controllers; use Illuminate\Http\Request; class HelloController extends Controller { public function index() { $message = "Hello World from Controller!"; return view('hello', compact('message')); } }

Giải thích:

  • $message là biến chứa dữ liệu bạn muốn truyền sang View.

  • Hàm view('hello', compact('message')) dùng để hiển thị view có tên hello.blade.php và truyền biến $message sang đó.

  • compact('message') là cú pháp PHP giúp tạo mảng dạng ['message' => $message].


Tạo View để hiển thị dữ liệu

Giờ chúng ta sẽ tạo file view để hiển thị nội dung từ Controller.
Tạo file mới: resources/views/hello.blade.php.

Nội dung:

<!DOCTYPE html> <html> <head> <title>Hello Laravel</title> </head> <body> <h1>{{ $message }}</h1> </body> </html>

Giải thích:

  • {{ $message }} là cú pháp Blade template trong Laravel dùng để hiển thị dữ liệu từ Controller.

  • Khi người dùng truy cập /hello, Laravel sẽ gửi $message sang view này và hiển thị nội dung ra màn hình.


Liên kết Route với Controller

Tiếp theo, quay lại file routes/web.php, cập nhật route để gọi đến Controller vừa tạo:

use App\Http\Controllers\HelloController; Route::get('/hello', [HelloController::class, 'index']);

Giờ hãy chạy server:

php artisan serve

Truy cập địa chỉ:
👉 http://localhost:8000/hello

Kết quả: Màn hình hiển thị “Hello World from Controller!” — chứng tỏ dữ liệu đã được truyền thành công từ Controller qua View.


Các cách truyền dữ liệu khác từ Controller sang View

Laravel hỗ trợ nhiều cách khác nhau để truyền dữ liệu từ Controller sang View, giúp bạn linh hoạt trong từng tình huống thực tế.

1. Sử dụng mảng thông thường

return view('hello', ['message' => 'Hello World from Array!']);

2. Sử dụng phương thức with()

return view('hello')->with('message', 'Hello World using with()!');

3. Truyền nhiều biến cùng lúc

$data = [ 'title' => 'Trang Hello Laravel', 'message' => 'Chào mừng bạn đến với Laravel!' ]; return view('hello', $data);

Mỗi cách đều cho ra cùng một kết quả, tuy nhiên cách dùng compact() thường được ưa chuộng vì ngắn gọn và dễ đọc.


Ví dụ nâng cao: Gửi danh sách sinh viên từ Controller sang View

Giả sử bạn muốn hiển thị danh sách sinh viên, ta có thể làm như sau:

Controller:

public function studentList() { $students = ['Nguyễn Văn A', 'Trần Thị B', 'Lê Văn C']; return view('students', compact('students')); }

View (students.blade.php):

<!DOCTYPE html> <html> <head> <title>Danh sách sinh viên</title> </head> <body> <h2>Danh sách sinh viên</h2> <ul> @foreach($students as $student) <li>{{ $student }}</li> @endforeach </ul> </body> </html>

Khi truy cập route /students, Laravel sẽ hiển thị danh sách sinh viên được truyền từ Controller sang View.


Một số lỗi thường gặp và cách khắc phục

1. View không tồn tại

Thông báo lỗi:

View [hello] not found.

👉 Nguyên nhân: File hello.blade.php chưa được tạo hoặc đặt sai vị trí.
✅ Giải pháp: Kiểm tra lại thư mục resources/views/.

2. Undefined variable

Thông báo lỗi:

Undefined variable: message

👉 Nguyên nhân: Chưa truyền biến $message từ Controller sang View.
✅ Giải pháp: Đảm bảo bạn có compact('message') hoặc truyền mảng đúng cú pháp.

3. Lỗi khi không khai báo namespace đúng

Khi route không nhận Controller, hãy chắc chắn rằng bạn đã use App\Http\Controllers\TênController; ở đầu file web.php.


Lời khuyên khi làm việc với Route - Controller - View

  • Giữ code sạch: Không nên viết logic xử lý trong Route, hãy tách riêng vào Controller.

  • Đặt tên có ý nghĩa: Route, Controller, View nên được đặt tên rõ ràng để dễ bảo trì.

  • Tận dụng Blade template: Giúp View dễ đọc, có thể tái sử dụng layout.

  • Kiểm tra dữ liệu trước khi render: Đảm bảo không để biến rỗng hoặc lỗi cú pháp.

Những thói quen nhỏ này sẽ giúp bạn làm việc với Laravel hiệu quả hơn rất nhiều.


Kết luận

Qua bài viết này, bạn đã nắm rõ cách truyền dữ liệu từ Controller qua View trong Laravel – bước đầu tiên trong hành trình làm chủ framework này. Từ ví dụ cơ bản Hello World cho đến việc hiển thị danh sách sinh viên, bạn đã thấy cách Laravel giúp việc giao tiếp giữa Route, Controller và View trở nên mượt mà, dễ hiểu và linh hoạt.

Hãy nhớ rằng, nắm vững cơ chế này chính là nền tảng để bạn tiếp tục học các phần quan trọng hơn như Model, Eloquent ORM, Form Request hay Authentication.

Nếu bạn cảm thấy bài viết hữu ích, đừng ngần ngại chia sẻ cho bạn bè cùng học nhé. Ở phần 2, chúng ta sẽ tiếp tục tìm hiểu cách xử lý dữ liệu từ form và gửi ngược về Controller trong Laravel — một kỹ năng không thể thiếu khi phát triển ứng dụng thực tế!

👉 Hãy theo dõi ngay để không bỏ lỡ!


Phản hồi từ học viên

5

Tổng 0 đánh giá

Đăng nhập để làm bài kiểm tra

Chưa có kết quả nào trước đó