1. Validation trong Laravel là gì?
Validation trong Laravel là cơ chế giúp kiểm tra tính hợp lệ của dữ liệu mà người dùng gửi lên server trước khi lưu vào database hoặc xử lý logic.
Laravel cung cấp hệ thống validate mạnh mẽ gồm:
- Validation trong Controller
- Validation bằng Form Request
- Custom Rule
- Thông báo lỗi (Error Messages)
- Validate theo nhiều điều kiện phức tạp
2. Tại sao Validation quan trọng trong Laravel?
1. Ngăn lỗi dữ liệu
- Không để người dùng nhập sai định dạng (email, số, ngày tháng...).
2. Bảo mật
- Tránh SQL Injection, XSS, input độc hại.
3. Tối ưu trải nghiệm người dùng
- Thông báo lỗi rõ ràng, đẹp mắt, dễ hiểu.
4. Giúp code gọn, dễ bảo trì
- Laravel tách riêng phần validate -> logic controller rõ ràng.
3. Các cách validation trong Laravel
Laravel hỗ trợ 3 cách:
- Validation trong Controller (nhanh - gọn)
- Validation bằng Form Request (chuẩn nhất)
- Custom Rule (validate logic đặc biệt)
Bài viết dưới sẽ hướng dẫn đầy đủ cả 3.
1. Validation trong Controller (cách dùng phổ biến nhất)
Ví dụ form gửi dữ liệu:
<form method="POST" action="/user/add">
@csrf
<input type="text" name="name">
<input type="email" name="email">
<button type="submit">Gửi</button>
</form>
Trong Controller:
public function store(Request $request)
{
$request->validate([
'name' => 'required|min:3|max:50',
'email' => 'required|email|unique:users,email',
]);
// Nếu validate thành công → thực thi tiếp
User::create($request->all());
return redirect()->back()->with('success', 'Thêm người dùng thành công!');
}
Laravel sẽ tự động:
- Kiểm tra dữ liệu
- Trả về lỗi nếu không hợp lệ
- Redirect về trang trước kèm lỗi
2. Validation bằng Form Request
Bước 1: Tạo Form Request
php artisan make:request StoreUserRequest
Bước 2: Khai báo rule trong class:
public function rules()
{
return [
'name' => 'required|string|min:3|max:50',
'email' => 'required|email|unique:users,email',
'password' => 'required|min:6'
];
}
Bước 3: Dùng trong Controller:
public function store(StoreUserRequest $request)
{
User::create($request->validated());
return back()->with('success', 'Thêm người dùng thành công!');
}
Ưu điểm:
- Code gọn
- Dễ bảo trì
- Rule tách riêng rõ ràng
- Hỗ trợ authorize
3. Custom Rule trong Laravel
Ví dụ: Validate số điện thoại Việt Nam.
Bước 1: Tạo Rule
php artisan make:rule PhoneNumber
Bước 2: Viết logic validate
public function passes($attribute, $value)
{
return preg_match('/^(03|05|07|08|09)+([0-9]{8})$/', $value);
}
public function message()
{
return 'Số điện thoại không hợp lệ.';
}
Bước 3: Áp dụng rule
'phone' => ['required', new PhoneNumber],
4. Danh sách các Rule Validation phổ biến
| Rule | Ý nghĩa |
| required | Bắt buộc nhập |
| Đúng định dạng email | |
| min:8 | Tối thiểu 8 ký tự |
| max:50 | Tối đa 50 ký tự |
| numeric | Là số |
| integer | Số nguyên |
| date | Định dạng ngày |
| after:today | Sau ngày hôm nay |
| before:today | Trước ngày hôm nay |
| unique:table,column | Không trùng trong DB |
| confirmed | Dùng cho password_confirm |
| image | File ảnh |
| mimes:jpg,png | Định dạng file |
| size:1024 | Dung lượng đúng 1MB |
| between:3,10 | Giá trị từ 3 đến 10 |
5. Hiển thị lỗi Validation trong Blade
Laravel tự động gửi biến $errors tới view.
@if ($errors->any())
<div class="alert alert-danger">
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
6. Tùy chỉnh thông báo lỗi (Custom Messages)
Trong Controller:
$request->validate([
'name' => 'required|min:3',
],[
'name.required' => 'Vui lòng nhập tên.',
'name.min' => 'Tên phải có ít nhất 3 ký tự.'
]);
Trong Form Request:
public function messages()
{
return [
'email.required' => 'Email không được bỏ trống.',
'email.email' => 'Email không đúng định dạng.',
];
}
7. Validate API JSON trong Laravel
Dùng:
$validator = Validator::make($request->all(), [
'email' => 'required|email'
]);
if ($validator->fails()) {
return response()->json($validator->errors(), 422);
}
8. Best Practice Validation Laravel 2025
- Dùng Form Request thay vì validate trực tiếp
- Tách rule - message - authorize rõ ràng
- Dùng Rule class cho logic phức tạp
- Validate server-side lẫn client-side
- Không validate qua JavaScript 100% (vì dễ bị bypass)
Kết luận
Validation là bước cực kỳ quan trọng trong Laravel giúp:
- Dữ liệu chính xác
- Nâng cao bảo mật
- Giảm lỗi hệ thống
- Tối ưu trải nghiệm người dùng
Laravel 2025 cung cấp hệ thống validation đơn giản, mạnh mẽ và dễ mở rộng, phù hợp cho cả website và API.
Ý kiến của bạn 0
Chưa có bình luận nào. Hãy là người đầu tiên!