Quay lại

Validating Laravel requests sử dụng rule objects Chuyên mục PHP và Laravel    2023-08-02    432 Lượt xem    97 Lượt thích    comment-3 Created with Sketch Beta. 0 Bình luận

Validating Laravel requests sử dụng rule objects

Laravel có vô số cách để validate các tham số request. Chẳng hạn, bạn có thể sử dụng phương thức validate của Illuminate\Http\Request nơi bạn có thể chỉ định tất cả các trường mà bạn muốn validate bên trong action của controller’s. Bạn có thể làm như này.

<?php

namespace App\Http\Controllers;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;

class PostController extends Controller
{
    /**
     * Store a new blog post.
     *
     * @param  Request  $request
     * @return Response
     */
    public function store(Request $request)
    {
        $validatedData = $request->validate([
            'title' => ['required' | 'unique:posts' | 'max:255'],
            'body' => ['required'],
            'author.name' => ['required'],
        ]);

        // The blog post is valid...
    }
}

Như được hiển thị ở trên, bạn có thể chỉ định các quy tắc validate được xác định trước (được phân tách bằng dấu gạch ngang [|]) trên các tham số request. Ngoài các quy tắc validate được xác định trước này, bạn cũng có thể xác định quy tắc của riêng mình bằng cách sử dụng “rule objects”.

Custom Rule Objects

Các Rule objects về cơ bản là các lớp triển khai Illuminate\Contracts\Validation\Rule interface. Một rule object chứa hai phương thức: passmessage. Phương thức pass nhận giá trị và tên thuộc tính và sẽ trả về true hoặc false tùy thuộc vào việc giá trị thuộc tính có hợp lệ hay không. Phương thức message sẽ trả về message lỗi validation sẽ được sử dụng khi xác thực không thành công.

Các đối tượng quy tắc có thể được tạo bằng lệnh make:rule Artisan như này.

php artisan make:rule Titlecase

Thao tác này sẽ tạo rule object Titlecase trong thư mục app/Rules. Đây là cách một rule object điển hình trông như thế nào.

<?php

namespace App\Rules;

use Illuminate\Contracts\Validation\Rule;

class Titlecase implements Rule
{
    /**
     * Determine if the validation rule passes.
     *
     * @param  string  $attribute
     * @param  mixed  $value
     * @return bool
     */
    public function passes($attribute, $value)
    {
        return ucwords($value) === $value;
    }

    /**
     * Get the validation error message.
     *
     * @return string
     */
    public function message()
    {
        return 'Each word in :attribute must begin with a capital letter';
    }
}

Sau khi rule object đã được xác định, bạn có thể đính kèm nó vào trình xác thực bằng cách chuyển một instance của rule object  với các validation rules khác của bạn như này.

use App\Rules\Titlecase;

$request->validate([
    'name' => ['required', 'string', new Titlecase],
]);

Và đó là cách bạn có thể triển khai các rule object tùy chỉnh của riêng mình để validates requests theo nhu cầu của bạn.

Mình cung cấp thêm !

Có các thư viện như axiom cung cấp một tập hợp các rule object validation hữu ích và có thể tái sử dụng của Laravel chẳng hạn như StrongPassword, TelephoneNumber, MaxWords, v.v. Vì vậy, bạn không cần phải làm việc vô ích cho các quy tắc validation  chung!

 

Bình luận (0)

Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough

Bài viết liên quan

Learning English Everyday