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

[Video] Tìm hiểu GET/POST trong Laravel qua ví dụ nhập thông tin người dùng - Lập trình Laravel

Mở bài

Trong hành trình học lập trình Laravel, một trong những khái niệm quan trọng mà bất kỳ lập trình viên nào cũng cần nắm vững là phương thức GET và POST. Đây là hai phương thức cơ bản trong giao tiếp giữa client (trình duyệt)server (máy chủ), đóng vai trò nền tảng trong việc gửi và nhận dữ liệu. Laravel — với triết lý “simple yet powerful” — đã cung cấp một cách tiếp cận cực kỳ thân thiện để làm việc với GET/POST thông qua route, controller, và request.

Nếu bạn từng băn khoăn làm thế nào để lấy dữ liệu người dùng từ form HTML và xử lý nó trong backend Laravel, thì bài viết này chính là dành cho bạn. Chúng ta sẽ cùng nhau tìm hiểu GET/POST trong Laravel qua ví dụ nhập thông tin người dùng, từng bước rõ ràng, có ví dụ thực tế, mã nguồn minh họa và giải thích chi tiết.

Sau bài viết này, bạn sẽ:

  • Hiểu rõ sự khác biệt giữa GET và POST trong Laravel.

  • Biết cách khai báo route và form tương ứng.

  • Viết controller nhận dữ liệu, xử lý và trả kết quả ra view.

  • Áp dụng best practices trong việc bảo mật và tối ưu code.

Cùng bắt đầu khám phá và làm chủ cơ chế GET/POST trong Laravel để biến các form HTML của bạn trở nên sống động và tương tác mạnh mẽ hơn bao giờ hết.


Tìm hiểu cơ bản về phương thức GET và POST

GET là gì?

Phương thức GET được sử dụng để lấy dữ liệu từ server. Khi bạn truy cập một URL hoặc gửi form bằng GET, dữ liệu sẽ được gửi qua tham số query string trong URL, ví dụ:

https://example.com/users?name=Diep&age=25

Đặc điểm của GET:

  • Dữ liệu hiển thị trên thanh địa chỉ.

  • Thường dùng để tìm kiếm, lọc dữ liệu, không nên dùng để gửi thông tin nhạy cảm.

  • Giới hạn kích thước dữ liệu (tùy trình duyệt).

POST là gì?

Ngược lại, POST dùng để gửi dữ liệu tới server để xử lý hoặc lưu vào cơ sở dữ liệu. Dữ liệu không hiển thị trên thanh địa chỉ, được gửi ngầm qua body của request.

Đặc điểm của POST:

  • Dữ liệu bảo mật hơn so với GET.

  • Thường dùng cho form đăng ký, đăng nhập, tạo mới bản ghi.

  • Không giới hạn độ dài dữ liệu.

Laravel hỗ trợ cả hai phương thức này một cách trực quan thông qua Route::get()Route::post(), cho phép bạn tách biệt logic xử lý cho từng loại request.


Tạo project và cấu hình cơ bản trong Laravel

Trước tiên, bạn cần khởi tạo một dự án Laravel mới để thực hành ví dụ:

composer create-project laravel/laravel form-example cd form-example

Cấu hình kết nối database (nếu cần) trong file .env, nhưng với ví dụ nhập thông tin người dùng này, ta có thể xử lý ngay trong controller mà không cần database.

Tiếp theo, chạy lệnh để khởi động server:

php artisan serve

Khi truy cập http://127.0.0.1:8000, bạn sẽ thấy giao diện mặc định của Laravel. Từ đây, ta bắt đầu thực hiện ví dụ minh họa GET/POST.


Định nghĩa route GET và POST trong Laravel

Trong Laravel, các route (đường dẫn) được khai báo trong file routes/web.php. Route có thể lắng nghe nhiều loại request khác nhau, tùy vào phương thức HTTP.

Ví dụ, ta tạo một form nhập thông tin người dùng với 2 bước:

  1. Hiển thị form nhập (GET request).

  2. Xử lý khi người dùng gửi form (POST request).

Mở file routes/web.php và thêm:

use App\Http\Controllers\UserController; use Illuminate\Support\Facades\Route; Route::get('/user/form', [UserController::class, 'showForm'])->name('user.form'); Route::post('/user/submit', [UserController::class, 'handleSubmit'])->name('user.submit');
  • Route::get() được dùng để hiển thị form.

  • Route::post() xử lý dữ liệu khi người dùng nhấn nút Submit.

  • Dùng name() để đặt tên route, giúp dễ dàng tham chiếu trong view.


Tạo Controller để xử lý GET/POST

Tiếp theo, ta tạo UserController để viết logic xử lý dữ liệu.

Chạy lệnh:

php artisan make:controller UserController

Trong file app/Http/Controllers/UserController.php, thêm nội dung:

namespace App\Http\Controllers; use Illuminate\Http\Request; class UserController extends Controller { // Hiển thị form nhập thông tin người dùng public function showForm() { return view('user.form'); } // Xử lý dữ liệu sau khi người dùng gửi form public function handleSubmit(Request $request) { // Lấy dữ liệu từ form $name = $request->input('name'); $email = $request->input('email'); $age = $request->input('age'); // Validate dữ liệu (ví dụ đơn giản) $request->validate([ 'name' => 'required|min:3|max:50', 'email' => 'required|email', 'age' => 'required|numeric|min:1|max:120', ]); // Truyền dữ liệu sang view kết quả return view('user.result', compact('name', 'email', 'age')); } }

Ở đây, ta đã sử dụng đối tượng Request — công cụ mạnh mẽ của Laravel để nhận, kiểm tra và xử lý dữ liệu.


Tạo View hiển thị form nhập thông tin người dùng

Laravel dùng Blade Template Engine để tạo view.
Tạo file resources/views/user/form.blade.php:

<!DOCTYPE html> <html> <head> <title>Nhập thông tin người dùng</title> </head> <body> <h1>Form Nhập Thông Tin Người Dùng</h1> @if ($errors->any()) <div style="color: red;"> <ul> @foreach ($errors->all() as $error) <li>{{ $error }}</li> @endforeach </ul> </div> @endif <form action="{{ route('user.submit') }}" method="POST"> @csrf <label for="name">Họ và tên:</label><br> <input type="text" id="name" name="name" value="{{ old('name') }}"><br><br> <label for="email">Email:</label><br> <input type="email" id="email" name="email" value="{{ old('email') }}"><br><br> <label for="age">Tuổi:</label><br> <input type="number" id="age" name="age" value="{{ old('age') }}"><br><br> <button type="submit">Gửi thông tin</button> </form> </body> </html>

Một vài điểm đáng chú ý:

  • Sử dụng @csrf để thêm token bảo mật chống tấn công CSRF.

  • old('field') giúp giữ lại dữ liệu cũ khi validate lỗi.

  • $errors->any() hiển thị danh sách lỗi trả về từ validate.

Khi truy cập /user/form, bạn sẽ thấy form nhập thông tin người dùng sẵn sàng gửi dữ liệu bằng phương thức POST.


Hiển thị kết quả sau khi gửi form

Tạo view resources/views/user/result.blade.php:

<!DOCTYPE html> <html> <head> <title>Kết quả nhập thông tin</title> </head> <body> <h1>Kết quả thông tin người dùng</h1> <p><strong>Họ và tên:</strong> {{ $name }}</p> <p><strong>Email:</strong> {{ $email }}</p> <p><strong>Tuổi:</strong> {{ $age }}</p> <a href="{{ route('user.form') }}">← Quay lại Form</a> </body> </html>

Giờ khi bạn điền form và bấm “Gửi thông tin”, dữ liệu sẽ được gửi qua POST đến controller, xử lý và truyền ngược trở lại view này để hiển thị.


Phân tích luồng hoạt động của GET/POST trong Laravel

  1. GET requestRoute::get('/user/form')UserController@showForm → render view form.

  2. Người dùng nhập dữ liệu → click Submit → gửi POST request.

  3. POST requestRoute::post('/user/submit')UserController@handleSubmit.

  4. Controller validate, lấy dữ liệu, truyền sang view user.result.

  5. View kết quả hiển thị thông tin người dùng.

Cấu trúc chuẩn MVC được tuân thủ hoàn hảo:

  • Model (nếu có): quản lý dữ liệu.

  • Controller: xử lý logic.

  • View: hiển thị nội dung.


Lời khuyên khi sử dụng GET và POST trong Laravel

  1. Dùng GET cho các thao tác đọc: tìm kiếm, lọc, xem chi tiết.

  2. Dùng POST cho các thao tác ghi: thêm, cập nhật, xóa dữ liệu.

  3. Bảo mật form với CSRF token: Laravel tự động thêm nếu bạn dùng @csrf.

  4. Validate dữ liệu trước khi xử lý để tránh lỗi và tấn công.

  5. Không lạm dụng POST cho mọi thao tác — hãy tuân thủ chuẩn RESTful.

  6. Sử dụng named route thay vì hardcode URL để dễ bảo trì.

  7. Hiển thị lỗi thân thiện giúp người dùng dễ sửa thông tin sai.


Mở rộng: Kết hợp GET và POST trong cùng module

Bạn có thể kết hợp GET và POST trong cùng chức năng, ví dụ trang quản lý người dùng:

  • GET: hiển thị danh sách người dùng, có filter theo tên/email.

  • POST: xử lý khi thêm mới người dùng.

Ví dụ:

Route::get('/users', [UserController::class, 'index'])->name('users.index'); Route::post('/users', [UserController::class, 'store'])->name('users.store');

Điều này giúp giữ cho ứng dụng gọn gàng, rõ ràng về mục đích của từng request — đúng với tinh thần RESTful mà Laravel khuyến nghị.


Một số lỗi thường gặp khi làm việc với GET/POST trong Laravel

  1. 419 Page Expired – Do quên thêm @csrf trong form.

  2. MethodNotAllowedHttpException – Gửi form bằng POST nhưng route chỉ khai báo GET.

  3. ValidationException – Nhập dữ liệu sai định dạng, không qua validate.

  4. Undefined variable trong view – Do không truyền biến qua compact() hoặc with().

Cách khắc phục:

  • Luôn kiểm tra lại phương thức trong route.

  • Sử dụng dd($request->all()) để debug dữ liệu nhận được.

  • Đọc log tại storage/logs/laravel.log để biết chi tiết lỗi.


Kết luận

Qua bài viết này, bạn đã hiểu trọn vẹn về GET/POST trong Laravel — hai phương thức cốt lõi giúp client và server trao đổi dữ liệu. Từ việc hiển thị form, xử lý dữ liệu gửi đi, validate, đến hiển thị kết quả — tất cả đều tuân theo mô hình MVC chuẩn mực của Laravel.

Thông qua ví dụ nhập thông tin người dùng, bạn không chỉ học được cách viết route, controller, view mà còn biết cách tổ chức code hợp lý, bảo mật form, và tối ưu trải nghiệm người dùng.

Bước tiếp theo, hãy mở rộng ví dụ này bằng cách:

  • Lưu dữ liệu vào database bằng Eloquent.

  • Thêm tính năng sửa, xóa và danh sách người dùng.

  • Kết hợp AJAX để gửi form mà không cần reload trang.

Khi nắm vững cơ chế GET/POST trong Laravel, bạn đã có nền tảng vững chắc để xây dựng các ứng dụng web mạnh mẽ, bảo mật và thân thiện hơn. Laravel không chỉ giúp lập trình dễ dàng — mà còn giúp bạn tư duy như một developer chuyên nghiệp.

Hãy bắt đầu mở Visual Studio Code, tạo file route, controller, view và thử ngay ví dụ này — bởi chỉ khi bạn gõ từng dòng code, khái niệm GET/POST mới thật sự trở thành của bạn.

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 đó