NTM Solutions

Thứ Bảy, 25 tháng 7, 2026

🚀 Laravel 12 (2026) — Bài 19 — Validation

Dưới đây là Bài 19, tiếp nối trực tiếp sau Request

Bài này sử dụng luôn các bảng và Model đã có trong khóa học (users, posts, categories, tags, profiles, countries), không tạo thêm cấu trúc dữ liệu mới.

Ở bài trước, chúng ta đã học cách lấy dữ liệu từ người dùng thông qua Request.

Tuy nhiên, dữ liệu người dùng nhập vào không phải lúc nào cũng hợp lệ. Họ có thể để trống tiêu đề, nhập email sai định dạng hoặc chọn một Category không tồn tại.

Laravel cung cấp Validation để kiểm tra dữ liệu trước khi lưu vào cơ sở dữ liệu.

Validation là một trong những tính năng được sử dụng nhiều nhất trong mọi dự án Laravel.


Validation là gì?

Validation là quá trình kiểm tra dữ liệu đầu vào.

Ví dụ:

  • Tiêu đề không được để trống.

  • Nội dung phải có ít nhất 20 ký tự.

  • Email phải đúng định dạng.

  • Category phải tồn tại.

  • Số điện thoại không được vượt quá số ký tự quy định.

Nếu dữ liệu không hợp lệ, Laravel sẽ tự động quay lại Form và hiển thị lỗi.


validate()

Trong Controller:

use Illuminate\Http\Request;

Ví dụ:

public function store(Request $request)
{
    $request->validate([

        'title' => 'required',

        'content' => 'required',

    ]);

}

Nếu người dùng bỏ trống một trong hai trường, Laravel sẽ tự động trả về lỗi.


required

Bắt buộc phải nhập.

'title' => 'required'

min

Độ dài tối thiểu.

'content' => 'required|min:20'

Người dùng phải nhập ít nhất 20 ký tự.


max

Giới hạn tối đa.

'title' => 'required|max:255'

Đây cũng là giới hạn phổ biến của kiểu dữ liệu string trong cơ sở dữ liệu.


email

Kiểm tra định dạng Email.

Ví dụ cập nhật User:

$request->validate([

    'email' => 'required|email',

]);

Laravel sẽ kiểm tra địa chỉ email có đúng định dạng hay không.


numeric

Chỉ cho phép số.

Ví dụ với số điện thoại trong bảng profiles:

$request->validate([

    'phone' => 'required|numeric',

]);

exists

Kiểm tra dữ liệu có tồn tại trong cơ sở dữ liệu.

Ví dụ khi thêm Post:

$request->validate([

    'category_id' =>

        'required|exists:categories,id',

]);

Nếu Category không tồn tại, Validation sẽ thất bại.


array

Người dùng chọn nhiều Tag.

$request->validate([

    'tags' => 'array',

]);

Kiểm tra từng Tag:

$request->validate([

    'tags.*' =>

        'exists:tags,id',

]);

Laravel sẽ kiểm tra từng ID trong mảng.


unique

Kiểm tra dữ liệu chưa tồn tại.

Ví dụ:

$request->validate([

    'email' =>

        'required|email|unique:users,email',

]);

Không cho phép trùng Email.


Validation khi tạo Post

Ví dụ:

$request->validate([

    'title' =>

        'required|max:255',

    'content' =>

        'required|min:20',

    'category_id' =>

        'required|exists:categories,id',

]);

Sau khi Validation thành công:

$post = Post::create([

    'title' => $request->title,

    'content' => $request->content,

    'category_id' => $request->category_id,

    'user_id' => 1,

]);

Tiếp theo:

$post->tags()->sync(

    $request->tags

);

Validation giúp đảm bảo dữ liệu trước khi lưu.


Validation cập nhật Profile

Ví dụ:

$request->validate([

    'phone' =>

        'required|numeric',

    'address' =>

        'required|max:255',

]);

Sau đó:

$profile->update([

    'phone' => $request->phone,

    'address' => $request->address,

]);

Hiển thị lỗi

Blade:

<input
    type="text"
    name="title"
    value="{{ old('title') }}">

Thông báo lỗi:

@error('title')

<div class="text-danger">

    {{ $message }}

</div>

@enderror

old() giúp giữ lại dữ liệu người dùng đã nhập sau khi Validation thất bại.


Validation Rule thường dùng

RuleÝ nghĩa
requiredBắt buộc nhập
nullableCó thể để trống
stringChuỗi ký tự
numericChỉ gồm số
integerSố nguyên
booleantrue / false
emailĐịnh dạng Email
minGiá trị tối thiểu
maxGiá trị tối đa
uniqueKhông được trùng
existsPhải tồn tại
arrayKiểu mảng

Tùy chỉnh thông báo lỗi

Có thể truyền thêm mảng thông báo:

$request->validate(

    [

        'title' => 'required',

    ],

    [

        'title.required' =>

            'Vui lòng nhập tiêu đề.',

    ]

);

Laravel sẽ hiển thị thông báo theo nội dung bạn định nghĩa.


Tổng kết

Trong bài này chúng ta đã học:

  • Validation là gì.

  • validate().

  • Các Rule phổ biến.

  • Validation với Post.

  • Validation với Profile.

  • Validation mảng Tag.

  • Hiển thị lỗi bằng @error.

  • Giữ dữ liệu bằng old().

Validation giúp bảo vệ dữ liệu, giảm lỗi và mang lại trải nghiệm tốt hơn cho người dùng.


Bài tập

  1. Thêm Validation khi tạo Post.

  2. Kiểm tra category_id bằng exists.

  3. Kiểm tra title không vượt quá 255 ký tự.

  4. Kiểm tra content có ít nhất 20 ký tự.

  5. Kiểm tra tất cả Tag được chọn đều tồn tại.

  6. Hiển thị lỗi bằng @error.

  7. Giữ lại dữ liệu bằng old() khi Validation thất bại.


Bài tiếp theo

Bài 20, chúng ta sẽ tìm hiểu Upload File, cách tải hình ảnh lên máy chủ, lưu đường dẫn vào cơ sở dữ liệu và hiển thị ảnh trong ứng dụng Laravel.

Bài 19 hoàn thiện quy trình xử lý Form cơ bản trong Laravel: Request → Validation → Lưu dữ liệu. Ở bài tiếp theo, người học sẽ bổ sung khả năng Upload File, một chức năng rất phổ biến trong các hệ thống Blog, CMS và ứng dụng quản lý nội dung.

Không có nhận xét nào:

Đăng nhận xét

Facebook Youtube RSS