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:

  1. Validation trong Controller (nhanh - gọn)
  2. Validation bằng Form Request (chuẩn nhất)
  3. 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
email Đú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.