Хелпери для часових інтервалів у Laravel 12.40

Перекладено ШІ 0 Laravel News 26 червня, 2026

Laravel 12.40.0 отримав нові зручні time helpers та функцію керування паузами в роботі черг. Дізнайтеся, як оновлений планувальник завдань і нове правило валідації файлів спростять вашу розробку.

Команда Laravel представила версію 12.40.0. У цьому релізі з'явилися нові хелпери для роботи з часом, можливість планувати завдання на конкретні дні місяця, функція призупинення черг та інші корисні оновлення.

# Хелпери для роботи з часом

Тейлор Отвелл додав нові допоміжні функції до простору імен Illuminate\Support та розширив можливості класу Carbon:

use Illuminate\Support\Carbon;
 
// Методи plus та minus тепер підтримують іменовані аргументи: 
// роки, місяці, тижні, дні, години, хвилини, секунди та мікросекунди.
Carbon::now()->plus(years: 1, days: 5);
 
Carbon::now()->minus(weeks: 4);

Також додано глобальні хелпери, які повертають екземпляр CarbonInterval:

use function Illuminate\Support\{seconds, minutes, hours, days, years};
 
seconds(5);
minutes(5);
hours(1);
days(30);
years(1);
 
/*
Carbon\CarbonInterval {#1277
    interval: + 1y,
}
*/

Ось кілька прикладів використання нових методів Carbon та функцій-хелперів:

use function Illuminate\Support\minutes;
 
Cache::put('name', 'Taylor', minutes(5));
 
Invitation::create([
    'expires_at' => now()->plus(weeks: 1),
]);

# Планування завдань на конкретні дні

Юсеф Кадах реалізував метод daysOfMonth(), який дозволяє запускати заплановані завдання у визначені дні місяця:

// Передача аргументів через кому
$schedule->command('generate-reports')
    ->daysOfMonth(1, 10, 20);
 
// Використання масиву
$schedule->command('generate-reports')
    ->daysOfMonth([1, 10, 20]);

# Правило валідації кодування

Джеймі Йорк додав правило валідації encoding. Воно перевіряє вміст файлу на відповідність заданому кодуванню:

use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rules\File;
 
Validator::validate($input, [
    'attachment' => [
        'required',
        File::types(['csv'])->encoding('utf-8'),
    ],
]);

# Призупинення та відновлення черг

Тепер роботу черг можна ставити на паузу та відновлювати за допомогою нових команд. Аргумент команди містить назву з'єднання та черги (наприклад, database:default):

php artisan queue:pause database:default
 
php artisan queue:continue database:default

Детальніше про роботу з воркерами черг читайте у документації.

# Нотатки до релізу

Повний список нових функцій та оновлень доступний у порівнянні версій 12.39.0 та 12.40.0 на GitHub. Нижче наведено офіційний changelog:

# v12.40.0

  • [12.x] Покращено тип повернення для Str::replace() (@axlon)
  • [12.x] Виправлено депрекації PHP 8.5 у SupportArrTest (@jnoordsij)
  • Додано метод daysOfMonth() для планування завдань (@yousefkadah)
  • [12.x] Додано правило валідації encoding для завантажених файлів (@ziadoz)
  • [12.x] Дозволено властивостям CachedState приймати null (@jackbayliss)
  • [12.x] Виправлено тест кодування (@jackbayliss)
  • [12.x] Виправлено MemoizedStore при роботі з Redis Cluster (@vadimonus)
  • [12.x] Оновлено повідомлення валідації для кодування (@jackbayliss)
  • [12.x] Використання scopedIf у CacheManager::memo() (@angelej)
  • [12.x] Виправлено RedisTaggedCache::flushStale з PhpRedisClusterConnection (@vadimonus)
  • [12.x] Додано підтримку параметрів за замовчуванням у метод Request::fluent() (@michaelnabil230)
  • [12.x] Виправлено невідповідність Content-ID вбудованих зображень у клонованих листах (@yinheli)
  • [12.x] Додано PredisClusterConnection::keys() (@vadimonus)
  • [12.x] Сумісність із PHP 8.5 (@crynobone)
  • [12.x] Запобігання від'ємним значенням у RateLimiter (@Button99)
  • [12.x] Оновлено RequestException@report() для повернення false (@cosmastech)
  • Додано хелпери часу (@taylorotwell)
  • Реалізовано паузу/відновлення черг (@yousefkadah)
  • [12.x] Виправлено RedisTaggedCache::flushValues з PredisClusterConnection (@vadimonus)
  • [12.x] Покращено тайпхінти для QueriesRelationships (@CasEbb)
  • [12.x] Виправлено нестабільний тест (@cosmastech)
  • [12.x] Оптимізовано AbstractRouteCollection@toSymfonyRouteCollection() (@cosmastech)
  • [12.x] Оптимізовано AbstractRouteCollection@matchAgainstRoute() (@cosmastech)
  • [12.x] Перенесено інтеграційні тести Redis (@vadimonus)
  • [12.x] Виправлено некоректний результат MemoizedStore::many з числовими ключами (@vadimonus)
  • [12.x] Додано testWrapEdgeCases для Str::wrap (@miladev95)
  • [12.x] Додано валідацію параметрів у метод Collection::sliding() (@Button99)
  • [12.x] Оновлено тип повернення методу path (завжди non-null string) (@IsmailBourbie)
  • Додано підтримку Google Antigravity IDE у ResolvesDumpSource.php (@yeasherarafath)
  • [12.x] Очищення логіки призупинення черг (@cosmastech)
  • [12.x] Спрощено логіку ParsesQueue@parseQueue (@rodrigopedra)
  • [12.x] Покращено тайпхінти для lazy loading violation callables (@cosmastech)
  • [12.x] Виправлено інвалідацію кешу заголовка Accept (@faisuc)
  • [12.x] Виправлено нестабільні тести в CacheArrayStore та ArraySessionHandler (@sumaiazaman)

Популярні

Інше, що варто прочитати

14 Оновлено 26 червня, 2026

Як задокументувати кілька API в Laravel за допомогою Scramble

Ви знали, що в одному додатку Laravel можна реалізувати кілька API? У нашій статті ви дізнаєтеся, як за допомогою Scramble легко документувати різні версії API та налаштувати доступ до документації, щоб зробити її публічною або приватною. Читайте далі, щоб дізнатися більше

50 Оновлено 26 червня, 2026

Nuxt 3 + Laravel Sanctum: Просте та надійне рішення для автентифікації вашого SPA та API

У сучасній веб-розробці аутентифікація є ключовою для захисту додатків і даних користувачів. Дізнайтеся, як модуль nuxt-sanctum-authentication спростить інтеграцію між Nuxt 3 та Laravel Sanctum, забезпечуючи надійний і зручний спосіб реалізації аутентифікації для вашого проєкту

24 Оновлено 26 червня, 2026

Створення MCP-серверів на PHP

Модельний контекстний протокол (MCP) відкриває нові горизонти в інтеграції AI-додатків з PHP. Дізнайтеся, як легко створити сервер, що відповідає MCP, та які можливості відкриваються для вашого проєкту