Quay lại

Điều chỉnh việc gửi biểu mẫu trong Laravel Chuyên mục PHP và Laravel    2023-09-08    1.5k Lượt xem    28 Lượt thích    comment-3 Created with Sketch Beta. 0 Bình luận

Điều chỉnh việc gửi biểu mẫu trong Laravel

Bạn có thể gặp phải tình huống mà bạn muốn hạn chế người dùng gửi biểu mẫu trong một thời gian nhất định. tức là để ngăn chặn việc gửi thư rác của người dùng.

Ví dụ: Giả sử bạn muốn hạn chế người dùng chỉ gửi biểu mẫu một lần trong khung thời gian năm phút. Đây có thể là một bảng tin công khai. Nếu anh ấy/cô ấy cố gắng gửi lại biểu mẫu trong năm phút tiếp theo, họ sẽ không thể gửi được. Bạn làm điều đó như thế nào?

Laravel’s custom validation rules hoặc rule objects tùy chỉnh của Laravel có thể được sử dụng ở đây.

Create a new rule

Đối với điều này, chúng ta có thể tạo một quy tắc mới gọi là ThrottleSubmission bằng cách sử dụng lệnh sau như sau.

php artisan make:rule ThrottleSubmission

Thao tác này sẽ tạo một lớp mới có tên ThrottleSubmission trong thư mục app/Rules. Ở đây trong phương thức pass(), bạn có thể viết logic để kiểm tra xem người dùng có gửi biểu mẫu trong 5 phút nhiều lần như vậy không.

<?php

namespace App\Rules;

use Illuminate\Contracts\Validation\Rule;
use App\User;

class ThrottleSubmission implements Rule
{
    protected $user;

    public function __construct(User $user)
    {
        $this->user = $user;
    }

    /**
     * Determine if the validation rule passes.
     *
     * @param  string  $attribute
     * @param  mixed  $value
     * @return bool
     */
    public function passes($attribute, $value)
    {
        return $this->user->latestMessage != null ? $this->user->latestMessage->created_at->lt(
            now()->subMinutes(5)
        ): null;
    }

    /**
     * Get the validation error message.
     *
     * @return string
     */
    public function message()
    {
        return 'Try submitting after some time.';
    }
}

Applying the rule

Sau khi hoàn tất, bạn có thể đính kèm quy tắc này vào trình xác thực bằng cách passing an instance of the rule object với các quy tắc xác thực khác của bạn vào input field như sau.

use App\Rules\ThrottleSubmission;

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

Và điều này về cơ bản sẽ ngăn người dùng gửi tin nhắn nhiều lần trong khoảng thời gian năm phút!

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