Цей реліз додає 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)
Тестування:
Колекції:
- Методи
Collectionтепер сумісні з конструкторами розширених підкласів (#59455)
Schema:
MariaDbSchemaStateтепер використовуєmysql --versionдля визначення клієнта замістьmariadb --version(#59360)
Безпека:
- Команда
install:broadcastingтепер передає прапорець--ignore-scriptsу npm/pnpm при встановленні пакетів, щоб запобігти виконанню життєвих циклів скриптів під час інсталяції (#59485)
Нотатки щодо оновлення
Для типових застосунків критичних змін не очікується. Перед оновленням перегляньте повний список змін.
Посилання