Validation trong Laravel

Giới thiệu

Trong quá trình phát triển ứng dụng bước kiểm tra dữ liệu hợp lệ là rất cần thiết. Bài viết này sẽ giới thiệu một số cách tiếp cận khác nhau mà Laravel cung cấp để xác thực dữ liệu.

Validate trong Laravel

1. Simple request validate

Để làm điều này, chúng ta sẽ sử dụng validate phương thức do đối tượng Illuminate\Http\Request cung cấp

/**
 * Store a new blog post.
 */
public function store(Request $request)
{
    $validated = $request->validate([
        'title' => 'required|unique:posts',
        'body' => ['required', 'max:255'],
    ]);
 
    // The blog post is valid...
 
    return redirect('/posts');
}
'title' => 'required|unique:posts'

Đối với field title ta sẽ kiểm tra 2 điều kiện các điều kiện cách nhau bởi ký tự |

  • required title phải tồn tại trong request gửi lên đồng thời không được để trống
  • unique:poststitle nội dung của nó phải là duy nhất đối với bảng posts
'body' => ['required', 'max:255']

Đối với field body cũng sẽ kiểm tra 2 điều kiện các điều kiện được chỉ định trong 1 mảng.

  • required body phải tồn tại trong request gửi lên đồng thời không được để trống
  • max:255 – Độ dài tối đa của body là 255 kí tự

Các quy tắc xác thực có thể được chỉ định dưới dạng các mảng hoặc một chuỗi được phân tách bới ký tự | như ví dụ trên.

2. Custom validate

Nếu bạn không muốn sử dụng validate phương thức theo yêu cầu, bạn có thể tạo một phiên bản trình xác thực theo cách thủ công bằng cách sử dụng Validator. Bạn có thể quyết định khi có lỗi thì làm gì tiếp theo như ví dụ bên dưới.

public function store(Request $request)
{
    $validator = Validator::make($request->all(), [
        'title' => 'required|unique:posts|max:255',
        'body' => 'required',
    ]);

    if ($validator->fails()) {
        return redirect('post/create')->withErrors($validator)->withInput();
    }

    // Store the blog post...
}

Trường hợp bạn muốn sử dụng xác thực theo cách thủ công nhưng vẫn tận dụng lợi thế automatic redirection của validate

Validator::make($request->all(), [
    'title' => 'required|unique:posts|max:255',
    'body' => 'required',
])->validate();

3. Form Request Validation

Đối với các tình huống xác thực phức tạp hơn, bạn có thể muốn tạo một “form request”. Form requests là các lớp yêu cầu tùy chỉnh đóng gói logic xác thực và ủy quyền của riêng chúng. Để tạo một form request class, bạn có thể sử dụng make:request

php artisan make:request StorePostRequest

Command trên sẽ tạo cho ta class StorePostRequest nằm trong folder app\Http\Requests, bên dưới là chi tiết file StorePostRequest.

<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class StorePostRequest extends FormRequest
{
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        return false;
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        return [
            //
        ];
    }
}
  • authorize phương thức chịu trách nhiệm xác định xem người dùng hiện được xác thực có thể thực hiện hành động được yêu cầu hay không
  • rules phương thức return các quy tắc xác thực sẽ áp dụng cho dữ liệu của yêu cầu

Ta sẽ copy phần validate ở trên vào đây

/**
 * Get the validation rules that apply to the request.
 *
 * @return array
 */
public function rules()
{
    return [
         'title' => 'required|unique:posts|max:255',
         'body' => 'required',
    ];
}

Function Store ở Controller ta sẽ sửa lại như sau.

public function store(StorePostRequest $request)
{
    // Store the blog post...
}

Với phường pháp xác thực này code của chúng ta sẽ dễ quản lý hơn.

Tham khảo:  https://laravel.com/docs/10.x/validation#form-request-validation

Cảm ơn tất cả mọi người đã đọc.

Related Posts