Дата релізу: 13 січня 2026
Версія Laravel: 12.47.0
Коротко
Laravel 12.47.0, випущений 13 січня 2026 року, приносить кілька покращень для розробницького досвіду: новий Blade-директив @includeIsolated для ізольованих include'ів, зручний метод Cache::withoutOverlapping() для операцій з блокуванням та розширену підтримку enum у різних частинах фреймворку. Додано підтримку precognitive-запитів для валідації масивів з wildcard, а також зроблено Notification клас macroable.
Основні новинки:
@includeIsolated для include'ів з ізольованими зміннимиCache::withoutOverlapping() — спрощення операцій з блокуваннямPendingBatch::onConnection() тепер приймає значення enumkey:generate, коли APP_KEY вже встановленийfailed_jobsBus::batch тепер фільтрує falsy-елементиУ Laravel 12.47.0 з'явився директив @includeIsolated, що дозволяє підключати Blade-шаблон без успадкування змінних з батьківського view. У включеного шаблону буде "чистий" контекст — тільки ті змінні, які ви явно передали. Це запобігає випадковому витоку змінних і робить шаблони передбачуванішими.
Стандартний @include успадковує змінні батьківського view:
{{-- $user is available in the parent --}}
@include('partials.header') {{-- $user is also available here --}}
З @includeIsolated включений шаблон починається з порожнього набору змінних і отримає лише те, що ви передасте:
{{-- $user is available in the parent --}}
@includeIsolated('partials.header') {{-- $user is NOT available here --}}
{{-- Pass only what you need --}}
@includeIsolated('partials.header', ['title' => 'Welcome'])
Особливо корисно при:
Pull Request: #58311
Новий метод Cache::withoutOverlapping() дає простіший API для виконання коду, який не має виконуватись одночасно в кількох процесах. Він обгортає звичний паттерн отримання блокування з очікуванням.
Раніше писали так:
Cache::lock('processing-order-' . $orderId)
->block(10)
->get(function () use ($orderId) {
// Process the order
});
Тепер можна використовувати більш виразний withoutOverlapping():
Cache::withoutOverlapping('processing-order-' . $orderId, function () use ($orderId) {
// Process the order - guaranteed no concurrent execution
}, seconds: 10);
Метод приймає ключ, callback і необов'язкові параметри для таймауту очікування та часу життя блокування:
Cache::withoutOverlapping(
key: 'send-daily-report',
callback: fn () => $this->generateAndSendReport(),
seconds: 30, // Wait up to 30 seconds for the lock
owner: 'worker-1' // Optional lock owner identifier
);
Ідеально підходить для job'ів у черзі, планувальника і будь-яких операцій, де паралельне виконання може призвести до неконсистентних даних.
Pull Request: #58303
Функція precognition тепер підтримує валідацію масивів з wildcard. Це дозволяє правильно валідовати поля масивів у precognitive-запитах, де використовують синтаксис *.
При валідації масивних полів з правилами типу:
$request->validate([
'items' => ['required', 'array'],
'items.*.name' => ['required', 'string', 'max:255'],
'items.*.quantity' => ['required', 'integer', 'min:1'],
]);
Precognitive-запити тепер коректно перевіряють окремі елементи масиву під час взаємодії користувача з динамічними формами, даючи миттєвий фідбек для кожного елемента.
Pull Request: #57486
Клас Illuminate\Notifications\Notification тепер macroable — можна додавати власні методи до всіх сповіщень:
use Illuminate\Notifications\Notification;
Notification::macro('sendToSlack', function (ChannelAwareSlackNotification $notification): void {
Notification::route('slack', $notification::slackChannel())->notify($notification);
});
Це дає змогу додавати спільну функціональність для всіх notification без створення базового класу.
Pull Request: #58352
Метод PendingBatch::onConnection() тепер приймає значення enum, що робить його сумісним з іншими частинами фреймворку, які вже підтримують enum для з'єднань черг:
enum QueueConnection: string
{
case Redis = 'redis';
case Database = 'database';
case Sync = 'sync';
}
Bus::batch([
new ProcessPodcast($podcast),
new OptimizePodcast($podcast),
])->onConnection(QueueConnection::Redis)->dispatch();
Pull Request: #58350
Додаткові методи Session Store тепер підтримують enum-ключі, що підвищує типобезпечність операцій з сесіями:
enum SessionKey: string
{
case Cart = 'cart';
case User = 'user';
case Preferences = 'preferences';
}
// Now supported with enum keys
session()->get(SessionKey::Cart);
session()->put(SessionKey::User, $user);
session()->forget(SessionKey::Preferences);
Pull Request: #58343
У JSON API-ресурсах Laravel циклічні посилання тепер автоматично дедуплікуються. Це запобігає нескінченним циклам і зменшує розмір відповіді при двобічних зв'язках:
// User has many posts, Post belongs to User
// Previously could cause circular reference issues
// Now automatically handled
return new UserResource($user->load('posts.author'));
Pull Request: #58348
Команда php artisan key:generate тепер показує корисніше повідомлення, коли APP_KEY вже встановлений. Це пояснює, чому ключ не генерується, і підказує використати прапорець --force, якщо ви дійсно хочете перегенерувати ключ:
$ php artisan key:generate
# Now shows: Application key already set. Use --force to regenerate.
Pull Request: #58345
Шаблон міграції failed_jobs тепер містить індекси для покращення продуктивності запитів. Під час створення таблиці автоматично додаються індекси на часто запитувані колонки:
Schema::create('failed_jobs', function (Blueprint $table) {
$table->id();
$table->string('uuid')->unique();
$table->text('connection');
$table->text('queue')->index(); // New index
$table->longText('payload');
$table->longText('exception');
$table->timestamp('failed_at')->useCurrent()->index(); // New index
});
Це прискорює запити до failed_jobs за назвою черги або часом помилки.
Pull Request: #58355
Bus::batch() тепер автоматично видаляє falsy-елементи, що спрощує умовне додавання job'ів до батчу:
Bus::batch([
new ProcessOrder($order),
$needsNotification ? new SendNotification($order) : null,
$needsAnalytics ? new TrackAnalytics($order) : null,
])->dispatch();
// Falsy items (null, false) are automatically removed
Pull Request: #58360
У реліз також увійшло кілька інших поліпшень:
Number::with*() (#58358)\Illuminate\Support\Str (#58356)Для типових застосунків не очікується зламу сумісності. Перед оновленням перегляньте повний changelog для деталей.
Досліджуйте нові можливості локалізації вашого Laravel-додатку з пакунками, які використовують штучний інтелект, такими як ChatGPT та Claude. Які рішення можуть спростити ваш процес перекладу та зробити його більш точним? Читайте далі, щоб дізнатися більше!
Laravel пропонує потужні можливості повнотекстового пошуку за допомогою методів whereFullText та orWhereFullText, що дозволяють здійснювати складні запити до бази даних. Дізнайтеся, як реалізувати ефективний пошук для вашого блогу чи системи управління контентом
Використання Vite для створення фронтенд-ресурсів у вашому додатку Laravel може бути захоплюючим, але іноді ви можете стикнутися з певними помилками. У цій статті ми розглянемо чотири поширені помилки, з якими ви можете зіткнутися, а також підкажемо способи їх усунення, щоб ви могли знову зосередитися на розробці вашого додатку