Cách validate form trong Laravel chuẩn chỉnh, bắt lỗi chi tiết

Trong bất kỳ ứng dụng web nào, việc tiếp nhận và xử lý dữ liệu người dùng gửi lên từ các biểu mẫu (form) luôn tiềm ẩn rủi ro về tính hợp lệ và an toàn bảo mật. Nếu thiếu đi lớp kiểm duyệt chặt chẽ, hệ thống dễ rơi vào trạng thái lỗi dữ liệu hoặc dính các mã độc tấn công. Việc nắm vững cách validate form trong Laravel sẽ giúp bạn xây dựng những bộ lọc dữ liệu thông minh, bắt lỗi chuẩn xác và mang lại trải nghiệm mượt mà cho người dùng.

1. Các phương pháp Validate dữ liệu trong Laravel

Laravel cung cấp hai cách tiếp cận chính để thực hiện kiểm duyệt dữ liệu đầu vào tùy thuộc vào quy mô và mức độ phức tạp của bài toán:

  • Validate trực tiếp tại Controller: Phù hợp với các form đơn giản, ít trường dữ liệu.
  • Validate bằng Form Request: Giải pháp chuyên nghiệp, tách bạch hoàn toàn logic kiểm duyệt dữ liệu ra khỏi Controller, giúp mã nguồn sạch và dễ bảo trì hơn.

Trước khi đi sâu vào các kỹ thuật kiểm duyệt nâng cao này, bạn có thể xem lại các thủ thuật cơ bản để nắm vững cách thức hoạt động của hệ thống Request.

READ  Xử Lý Errors Và Lỗi Logging Trong Laravel

2. Sử dụng $request->validate() trực tiếp trong Controller

Cách nhanh nhất để kiểm tra dữ liệu gửi lên là gọi phương thức validate() trực tiếp bên trong phương thức xử lý của Controller.

3. Tách bạch logic với Form Request (Khuyên dùng)

Đối với các dự án lớn, việc nhồi nhét các quy tắc validate dài dòng vào Controller sẽ làm giảm tính linh hoạt. Bạn nên tạo một lớp Form Request riêng biệt bằng câu lệnh Artisan:

Bash

php artisan make:request StoreUserRequest

File mới sẽ được sinh ra tại thư mục app/Http/Requests/StoreUserRequest.php. Bạn cấu hình lại phương thức authorize thành true và định nghĩa các luật kiểm duyệt trong rules:

PHP

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class StoreUserRequest extends FormRequest

{

    public function authorize(): bool

    {

        return true; // Cho phép request này được thực thi

    }

    public function rules(): array

    {

        return [

            ‘name’ => [‘required’, ‘string’, ‘max:255’],

            ’email’ => [‘required’, ‘string’, ’email’, ‘max:255’, ‘unique:users’],

            ‘password’ => [‘required’, ‘string’, ‘min:8’, ‘confirmed’],

        ];

    }

    // Tùy chỉnh thông báo lỗi tiếng Việt (tùy chọn)

    public function messages(): array

    {

        return [

            ’email.unique’ => ‘Địa chỉ email này đã tồn tại trong hệ thống.’,

            ‘password.min’ => ‘Mật khẩu yêu cầu tối thiểu 8 ký tự.’,

        ];

    }

}

Sau đó, tại Controller, bạn chỉ cần truyền StoreUserRequest vào tham số thay vì Request thông thường:

PHP

public function register(StoreUserRequest $request)

{

    // Dữ liệu tại đây chắc chắn đã sạch và hợp lệ tuyệt đối

    $validated = $request->validated();

    // Tiến hành lưu dữ liệu…

}

Để tối ưu hóa cấu trúc toàn bộ dự án và học hỏi thêm nhiều mô hình kiến trúc backend chuẩn chỉnh, bạn có thể tham khảo tại Học Laravel để tìm hiểu thêm nhiều tài nguyên hữu ích.

READ  Cách tạo database trong Laravel qua Migration và .env

4. Hiển thị lỗi và giữ lại giá trị cũ trên giao diện Blade

Khi validate thất bại, Laravel cung cấp biến toàn cục $errors trong các Blade view để bạn dễ dàng hiển thị thông báo lỗi ngay dưới từng ô input, kết hợp hàm old() để giữ lại dữ liệu người dùng đã nhập trước đó:

HTML

<form action=”{{ route(‘register.store’) }}” method=”POST”>

    @csrf

    <div class=”form-group”>

        <label>Họ và tên</label>

        <input type=”text” name=”name” value=”{{ old(‘name’) }}” class=”form-control”>

        @error(‘name’)

            <span class=”text-danger”>{{ $message }}</span>

        @enderror

    </div>

    <div class=”form-group”>

        <label>Email</label>

        <input type=”email” name=”email” value=”{{ old(’email’) }}” class=”form-control”>

        @error(’email’)

            <span class=”text-danger”>{{ $message }}</span>

        @enderror

    </div>

    <div class=”form-group”>

        <label>Mật khẩu</label>

        <input type=”password” name=”password” class=”form-control”>

        @error(‘password’)

            <span class=”text-danger”>{{ $message }}</span>

        @enderror

    </div>

    <div class=”form-group”>

        <label>Xác nhận mật khẩu</label>

        <input type=”password” name=”password_confirmation” class=”form-control”>

    </div>

    <button type=”submit” class=”btn btn-primary”>Đăng ký</button>

</form>

Việc áp dụng linh hoạt các quy tắc kiểm duyệt dữ liệu thông qua hệ thống validation mạnh mẽ của Laravel không chỉ giúp bảo vệ cơ sở dữ liệu khỏi các thông tin rác mà còn nâng cao đáng kể chất lượng trải nghiệm người dùng trên hệ thống web của bạn.

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *