Laravel 13.3.0: атрибут #[UnitTest], варіативні аргументи для моделей та інші новинки

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

Новий реліз Laravel представляє атрибут #[UnitTest] для надшвидкого тестування та зручні варіативні аргументи для атрибутів моделей. Дізнайтеся, як ці оновлення та покращений моніторинг черг допоможуть оптимізувати ваш процес розробки.

Цей реліз додає PHP-атрибут #[UnitTest] для пропуску завантаження фреймворку в окремих методах тестування, підтримку варіативних аргументів для атрибутів моделей (#[Fillable], #[Hidden] тощо), нову подію BatchStarted у життєвому циклі пакетів завдань та інші покращення.

  • Новий атрибут #[UnitTest] для пропуску завантаження фреймворку в окремих тестах
  • Варіативні аргументи для #[Fillable], #[Appends], #[Hidden] та інших атрибутів моделей
  • Нова подія BatchStarted для моніторингу життєвого циклу пакетів завдань
  • Відображення використання пам'яті у детальному виводі воркера черги (verbose mode)
  • Безпека: команда install:broadcasting тепер передає прапорець --ignore-scripts у npm/pnpm

# Що нового

# Атрибут #[UnitTest]

Новий атрибут #[UnitTest] дозволяє пропускати завантаження (booting) фреймворку для окремих методів у межах TestCase. Це корисно, коли більшість тестів у класі потребують контейнера, але кілька методів є чистими юніт-тестами, яким він не потрібен.

Раніше кожен тест у класі витрачав ресурси на завантаження всього фреймворку. З #[UnitTest] такі методи виконуються як звичайні тести PHPUnit, що може бути на порядок швидше.

use Illuminate\Foundation\Testing\Attributes\UnitTest;
 
class LocationServiceTest extends TestCase
{
    public function test_getCoordinates_resolves_address_for_us(): void
    {
        // потребує контейнера
    }
 
    #[UnitTest]
    public function test_getState_returns_state_from_abbreviation(): void
    {
        // завантаження фреймворку не потрібне
    }
}

Pull Request: #59432

# Варіативні атрибути моделей

Кілька атрибутів Eloquent-моделей тепер приймають варіативні аргументи. Раніше потрібно було передавати масив, тепер же кожне значення можна вказати окремим аргументом:

// Було
#[Fillable(['first_name', 'last_name'])]
#[Hidden(['password', 'secret'])]
class User extends Model {}
 
// Стало
#[Fillable('first_name', 'last_name')]
#[Hidden('password', 'secret')]
class User extends Model {}

Передача одного масиву все ще підтримується, тому це оновлення не ламає зворотну сумісність.

Pull Request: #59421

# Подія BatchStarted

Нова подія BatchStarted спрацьовує, коли починається обробка першого завдання у пакеті (незалежно від результату). Це заповнює прогалину в життєвому циклі пакета:

  • BatchDispatched — завдання додані в чергу, але ще не взяті в роботу
  • BatchStarted — обробка першого завдання почалася
  • BatchFinished — усі завдання завершені (або скасовані)
  • BatchCanceled — пакет завдань скасовано

Це дозволяє чітко відрізняти пакет, що просто чекає в черзі, від того, що вже активно виконується, що важливо для моніторингу прогресу та оновлення UI.

Pull Request: #59458

# Використання пам'яті у виводі черги

При запуску воркера черги з прапорцем -v, для кожного виконаного завдання тепер відображається поточне споживання пам'яті поруч із часом виконання:

# Було
2026-04-01 09:45:39 App\Jobs\ProcessReport 121599597 database reports 110.57ms DONE
 
# Стало
2026-04-01 09:45:39 App\Jobs\ProcessReport 121599597 database reports 44.58ms 132.5MB DONE

Для вимірювання пам'яті використовується та сама логіка, що і для внутрішньої перевірки memoryExceeded. Це дає змогу бачити, наскільки близько завдання підходить до ліміту --memory.

Pull Request: #59379

# Інші виправлення та покращення

Черги та воркери:

  • Передача releaseOnTerminationSignals через групи розкладу (#59357)
  • Додано LostConnection до WorkerStopReason (#59370)
  • Виправлено впровадження залежностей для фейкового диспетчера черг (#59378)
  • Кешування результату getLockForPopping() у DatabaseQueue (#59435)
  • Підтримка Enum у методах з'єднання QueueManager (#59389)
  • Підтримка Enum у методах каналів та драйверів LogManager (#59391)

Планувальник (Scheduling):

  • Виправлено пропуски в розкладах із періодичністю менше хвилини на межах хвилин (#59331)

Моделі та база даних:

  • Виправлено incrementEach/decrementEach для обмеження областю екземпляра моделі (#59376)
  • Виправлено зіставлення при жадібному завантаженні MorphTo, коли ownerKey дорівнює null, а ключ результату не є примітивом (#59394)
  • Атрибут CollectedBy тепер підтримує успадкування (#59419)
  • Об'єкти Stringable тепер можна повертати з casts() (#59479)
  • Виправлено макроси зі статичними замиканнями (#59414)

HTTP та запити:

  • Додано метод ->file() до $request->safe() для доступу до валідованих файлів (#59396)
  • Передача запиту в колбек afterResponse (#59410)

URI:

  • Додано метод isNotEmpty() до класу Uri (#59408)
  • Додано метод withoutFragment() до класу Uri (#59413)
  • Виправлено збереження фрагмента URI при декодуванні рядків запиту (#59481)

Тестування:

  • Додано assertHasNoAttachments() до Mailable (#59443)
  • Додано метод driver() до MailFake (#59448)

Колекції:

  • Методи Collection тепер сумісні з конструкторами розширених підкласів (#59455)

Schema:

  • MariaDbSchemaState тепер використовує mysql --version для визначення клієнта замість mariadb --version (#59360)

Безпека:

  • Команда install:broadcasting тепер передає прапорець --ignore-scripts у npm/pnpm при встановленні пакетів, щоб запобігти виконанню життєвих циклів скриптів під час інсталяції (#59485)

Нотатки щодо оновлення

Для типових застосунків критичних змін не очікується. Перед оновленням перегляньте повний список змін.

Посилання

Популярні

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

173 Оновлено 01 червня, 2026

Використання повнотекстового пошуку в Laravel

Laravel пропонує потужні можливості повнотекстового пошуку за допомогою методів whereFullText та orWhereFullText, що дозволяють здійснювати складні запити до бази даних. Дізнайтеся, як реалізувати ефективний пошук для вашого блогу чи системи управління контентом

15 Оновлено 01 червня, 2026

Журнал аудиту в Laravel

Хочете забезпечити повну прозорість у своїх Laravel-додатках? Пакет Laravel Audit Log допоможе вам детально відстежувати всі зміни моделей Eloquent та відповідати вимогам регуляторів. Читайте далі, щоб дізнатися, як цей потужний інструмент може підвищити надійність вашого проєкту

49 Оновлено 01 червня, 2026

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

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