Laravel 14 - наступний мажорний реліз фреймворку Laravel, який очікується у першому кварталі 2027 року. Цей реліз вимагатиме PHP 8.4 як мінімальну версію та слідуватиме стандартному циклу підтримки Laravel: виправлення помилок до третього кварталу 2028 року та оновлення безпеки до першого кварталу 2029 року.
Команда Laravel ще не оголосила офіційну дату релізу чи перелік функцій. Вся інформація нижче походить із гілки master репозиторію laravel/framework, де відбувається розробка Laravel 14, і будь-що може змінитися до релізу.
Нові можливості
Функції Laravel 14 додаватимуться до цього посту в міру їх оголошення. Більшість нових можливостей досі виходять у щотижневих мінорних релізах Laravel 13, а функції нижче чекають на Laravel 14, оскільки вони додають метод до контракту або змінюють сигнатуру.
Route::query()
#60655 від Vazha Aptsiauri додає підтримку маршрутизації для HTTP-методу QUERY - безпечного методу, який передає тіло запиту:
Route::query('/search', function () {
return request()->input('filter');
});
Route::any() включає QUERY, а CSRF-middleware обробляє його як запит на читання, так само як GET, HEAD та OPTIONS.
Laravel 13.19 вже додав Http::query() до HTTP-клієнта разом із тестовими хелперами query() та queryJson().
$user->authorize()
Will Rowe додав метод authorize() до контракту та трейту Authorizable у #59708:
// Laravel 13
Gate::forUser($user)->authorize('viewAny', Post::class);
// Laravel 14
$user->authorize('viewAny', Post::class);
Він працює як $user->can(), але викидає AuthorizationException, коли перевірка не проходить.
Контекст для report()
Хелпер report() та метод report() обробника винятків приймають необов'язковий масив контексту, доданий Caleb White у #60767:
try {
$order->charge();
} catch (Throwable $e) {
report($e, ['order_id' => $order->id]);
}
Контракт ExceptionHandler змінюється на report(Throwable $e, array $context = []), тому власний обробник, який перевизначає report(), потребує новий параметр.
Storage::fake() для дисків на вимогу
Storage::fake('ondemand') перехоплює виклики Storage::build(), тож ви можете тестувати диски на вимогу з тими ж твердженнями, що й іменовані диски (#61378). PR надіслано до master, оскільки додаток може вже мати диск з назвою ondemand.
orWhereKey() та підзапити в whereKey()
Caleb White консолідував whereKey() та whereKeyNot() і додав orWhereKey() та orWhereKeyNot() у #61395. Другий PR, #61496, дозволяє всім чотирьом методам приймати підзапит.
Критичні зміни
Методи паузи черги приймають чергу першою
Laravel 13.25 додав можливість призупиняти всі черги, а методи для окремих черг на фасаді Queue вимагали з'єднання як перший аргумент. #61076 переміщує з'єднання в кінець і робить його типовим:
// Laravel 13
Queue::pause('redis', 'emails');
Queue::pauseFor('redis', 'emails', 60);
// Laravel 14
Queue::pause('emails');
Queue::pauseFor('emails', 60);
Queue::pause('emails', 'redis');
resume() та isPaused() також приймають чергу першою та необов'язкове з'єднання другим.
lazy() та chunk() більше не змінюють Builder
У Laravel 13 lazy() та chunk() змінюють query builder під час пагінації. Повторне використання того ж builder після цього повертає неправильний результат:
$query = User::query();
foreach ($query->lazy(2) as $user) {
// ...
}
$query->count(); // 0 у Laravel 13
Jack Bayliss виправив обидва методи в #61411 та #61428, тож count() повертає повне число рядків у Laravel 14.
findOr() з масивом ID
Builder::findOr() ніколи не викликав callback, коли ви передавали масив ID. #61577 від Matthieu робить його відповідним findOrFail() та версіям findOr() для зв'язків:
User::findOr([1, 99], fn () => 'fallback');
// Laravel 13: колекція, що містить лише користувача 1
// Laravel 14: 'fallback'
Cache::has() та Cache::forget() з масивами
Docblock'и для has() та forget() приймають масиви вже чотири роки, але Cache::has(['a', 'b']) завжди повертав true, а Cache::forget(['a', 'b']) не видаляв ключі. #61466 від Jack Bayliss виправляє обидва методи. У Laravel 14 has() повертає true тільки коли кожен ключ існує:
Cache::put('foo', 'bar');
Cache::has(['foo', 'missing']);
// Laravel 13: true
// Laravel 14: false
Передача масиву до forget() видаляє кожен ключ, і він повертає true тільки коли кожен ключ було видалено:
Cache::forget(['foo', 'baz']);
// Laravel 13: ключі залишаються, і Redis-сховище видає
// попередження "Array to string conversion"
// Laravel 14: обидва ключі видаляються
MassPrunable включає м'яко видалені моделі
Трейт Prunable додає withTrashed() до запиту очищення, коли модель використовує м'яке видалення. MassPrunable не робив цього, і #61425 робить їх узгодженими. Візьмемо модель, що використовує обидва трейти:
use Illuminate\Database\Eloquent\MassPrunable;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
class Post extends Model
{
use MassPrunable, SoftDeletes;
public function prunable()
{
return static::where('created_at', '<=', now()->subMonth());
}
}
У Laravel 13 model:prune примусово видаляє відповідні пости, які не є м'яко видаленими, а м'яко видалені пости залишаються в таблиці. У Laravel 14 він примусово видаляє кожен відповідний пост, включно з м'яко видаленими.
Якщо ви використовуєте MassPrunable на моделі з м'яким видаленням, перевірте, що ваш запит prunable() досі вибирає очікувані рядки. Щоб зберегти поведінку Laravel 13, додайте withoutTrashed() до запиту.
Вимоги до версії PHP
Laravel 14 вимагатиме PHP 8.4 як мінімальну версію, що є підвищенням від мінімальної версії PHP 8.3 у Laravel 13. У #59104 Laravel 14 підвищує мінімальну версію до PHP 8.4, оскільки Symfony 8 вимагає PHP 8.4 як мінімум.
Laravel також працюватиме з новішими версіями PHP. Дивіться Що нового в PHP 8.6 для решти інформації про цей реліз.
Інші зміни залежностей у master, які ймовірно з'являться в Laravel 14:
ably/ably-php переходить на версію, що використовує протокол Ably 2.0 (#60860)
orchestra/testbench-core переходить на ^12.0
- Підтримуються PHPUnit 11.5, 12.5 та 13
Часова лінія підтримки
Політика підтримки Laravel передбачає щорічний вихід мажорних релізів приблизно в першому кварталі. Відповідно до цієї політики, Laravel 14 отримуватиме виправлення помилок до третього кварталу 2028 року та оновлення безпеки до першого кварталу 2029 року:
| Версія |
PHP (*) |
Реліз |
Виправлення помилок до |
Оновлення безпеки до |
| 11 |
8.2 - 8.4 |
12 березня 2024 |
3 вересня 2025 |
12 березня 2026 |
| 12 |
8.2 - 8.5 |
24 лютого 2025 |
13 серпня 2026 |
24 лютого 2027 |
| 13 |
8.3 - 8.5 |
17 березня 2026 |
Q3 2027 |
17 березня 2028 |
| 14 |
8.4+ |
Q1 2027 |
Q3 2028 |
Q1 2029 |
Примітка: Офіційна документація ще не містить Laravel 14, офіційні деталі TBD.
Laravel 13, випущений 17 березня 2026 року, продовжуватиме отримувати:
- Виправлення помилок до третього кварталу 2027 року
- Оновлення безпеки до 17 березня 2028 року
Laravel 12 більше не отримує виправлення помилок, а його оновлення безпеки закінчуються 24 лютого 2027 року.
Оновлення до Laravel 14
Якщо ви хочете автоматизувати оновлення, коли Laravel 14 буде випущено, перевірте Laravel Shift. Shift відкриває pull request з атомарними комітами для вашого перегляду.