Динамічне скидання обмежень швидкості за допомогою методу clear у Laravel

Перекладено ШІ
Оригінал: Laravel News
Оновлено: 21 червня, 2025
Чи готові ви дізнатися, як динамічно управляти обмеженнями швидкості у ваших Laravel-додатках? У цій статті ми розглянемо метод clear RateLimiter, який дозволяє ефективно скидувати ліміти в різних сценаріях, зокрема під час завантаження файлів

Метод `clear` класу RateLimiter у Laravel дозволяє динамічно скинути обмеження швидкості, коли виконуються певні умови, що надає гнучкий контроль над поведінкою обмеження в ваших додатках

Скинути обмеження швидкості програмно:

use Illuminate\Support\Facades\RateLimiter;

RateLimiter::clear('api-calls:' . $userId);

Ось практичний приклад для системи завантаження файлів:

class FileUploadController extends Controller
{
    public function upload(Request $request)
    {
        $key = 'file-upload:' . auth()->id();
        $limiter = RateLimiter::attempt(
            $key,
            $perHour = 10,
            function() use ($request) {
                return FileUpload::create([
                    'user_id' => auth()->id(),
                    'filename' => $request->file('document')->store('uploads'),
                    'size' => $request->file('document')->getSize()
                ]);
            }
        );

        if (!$limiter) {
            return response()->json([
                'error' => 'Обмеження на завантаження перевищено. Будь ласка, почекайте.'
            ], 429);
        }

        return response()->json(['status' => 'Файл успішно завантажено']);
    }

    public function approveUpload(FileUpload $upload)
    {
        $this->authorize('approve', $upload);

        $upload->update(['status' => 'approved']);

        RateLimiter::clear('file-upload:' . $upload->user_id);

        return response()->json([
            'status' => 'Завантаження схвалено',
            'quota_reset' => true
        ]);
    }

    public function resetUserQuotas(User $user)
    {
        RateLimiter::clear('file-upload:' . $user->id);
        RateLimiter::clear('bulk-download:' . $user->id);
        RateLimiter::clear('share-link:' . $user->id);

        return back()->with('success', 'Квоти завантаження скинуто');
    }
}

Метод `clear` надає можливість програмно скинути обмеження швидкості за умови виконання певних критеріїв, що робить вашу систему обмежень більш динамічною та зручною для користувачів