Laravel v13.9.0 додає метод Password::toPasswordRulesString() для генерації HTML-атрибута passwordrules. Це дозволяє браузерам і менеджерам паролів автоматично пропонувати паролі, що відповідають вимогам безпеки вашого додатка. Крім того, з’явилися метрики для черг Laravel Cloud, підтримка зберігання великих SQS-повідомлень на диску та інші оновлення:
Password::toPasswordRulesString()для атрибутівpasswordrulesв HTML.- Метрики для Cloud-черг для телеметрії обробки завдань.
- Опціональне зберігання великих SQS-повідомлень на диску.
- Підтримка
timeoutуConcurrency::run(). - Підтримка
Conditionable(методиwhen()таunless()) уPendingDispatch. - Інтерфейс
PreparesForDispatchдля хуків перед відправкою завдань у чергу. - Хелпер
foreignUuidForдля схем міграцій. ThrottlesExceptionsтепер приймаєClosureдля налаштування часу очікування (backoff).- Підтримка Enum для контекстного зв’язування атрибутів.
# Що нового
# Password::toPasswordRulesString()
Правило валідації Password отримало метод toPasswordRulesString(). Він перетворює правила Laravel на рядок атрибута passwordrules для HTML-інпутів.

Атрибут passwordrules — це специфікація Apple, яку підтримують Safari, 1Password, Bitwarden та інші сервіси. Завдяки їй менеджери паролів «розуміють» обмеження вашого додатка та генерують валідні паролі автоматично, позбавляючи користувача методу спроб і помилок.
Методи Password відповідають таким токенам правил:
Метод Password |
Токен passwordrules |
|---|---|
min(n) |
minlength: n |
max(n) |
maxlength: n |
letters() |
required: lower |
mixedCase() |
required: lower; required: upper |
numbers() |
required: digit |
symbols() |
required: special |
Правило uncompromised() не має еквівалента в passwordrules, тому воно ігнорується.
Приклади виводу для різних комбінацій:
Password::min(8)->toPasswordRulesString();
// 'minlength: 8;'
Password::min(8)->max(64)->toPasswordRulesString();
// 'minlength: 8; maxlength: 64;'
Password::min(8)->letters()->toPasswordRulesString();
// 'minlength: 8; required: lower;'
Password::min(8)->mixedCase()->toPasswordRulesString();
// 'minlength: 8; required: lower; required: upper;'
Password::min(12)->max(64)->mixedCase()->numbers()->symbols()->toPasswordRulesString();
// 'minlength: 12; maxlength: 64; required: lower; required: upper; required: digit; required: special;'
Найкраще використовувати цей метод разом із Password::defaults(), щоб політика безпеки з AppServiceProvider автоматично застосовувалася і до серверної валідації, і до браузерних підказок:
// app/Providers/AppServiceProvider.php
Password::defaults(fn () => Password::min(12)->max(64)->mixedCase()->numbers()->symbols());
<input
type="password"
autocomplete="new-password"
passwordrules="{{ Password::defaults()->toPasswordRulesString() }}"
/>
Тепер, коли користувач фокусується на полі, браузер запропонує пароль, який гарантовано відповідає вашим правилам.
# Метрики для Cloud-черг
Додано відстеження метрик для з'єднань Laravel Cloud. Новий декоратор Illuminate\Foundation\Cloud\Queue огортає драйвер черги та надсилає події через сокет при додаванні завдання, початку та завершенні його обробки. Це дає Laravel Cloud можливість моніторити пропускну здатність та тривалість роботи воркерів.
Також реалізовано підтримку кешування конфігурації для Cloud-черг: префікси та суфікси тепер зчитуються з файлів конфігурації, що забезпечує коректну роботу php artisan config:cache.
# Зберігання великих SQS-повідомлень на диску
SQS обмежує розмір повідомлення 1 МБ. Якщо серіалізоване завдання перевищує цей ліміт, AWS повертає помилку. У новій версії додано параметр extended_store_options для SQS. Він дозволяє зберігати великі об'єкти на диску (наприклад, S3), передаючи через SQS лише вказівник. Воркер автоматично завантажує повні дані перед обробкою.
// config/queue.php
'sqs' => [
// ...
'extended_store_options' => [
'enabled' => env('SQS_STORE_ENABLED', false),
'disk' => env('SQS_STORE_DISK', 's3'),
'prefix' => env('SQS_STORE_PREFIX', ''),
'always' => false,
'cleanup' => true,
],
],
enabled— увімкнути функцію (за замовчуваннямfalse).disk— диск для зберігання даних.prefix— префікс шляху до файлів.always— якщоtrue, на диск будуть зберігатися всі повідомлення незалежно від розміру.cleanup— якщоtrue, видаляти файл після успішної обробки завдання.
# Підтримка таймауту в Concurrency::run()
Метод Concurrency::run() за замовчуванням використовує драйвер process із таймаутом 60 секунд. Тепер цей ліміт можна налаштовувати:
Concurrency::run([
fn () => longRunningTask(),
], timeout: 300);
# Умовна відправка у PendingDispatch
PendingDispatch тепер підтримує трейт Conditionable. Це дозволяє використовувати методи when() та unless() безпосередньо при відправці завдань:
SendPersonalDetailsToFraudDetectionTool::dispatch($customer)
->when($customer->hasSufficientPersonalDetails(), fn ($job) => $job->withoutDelay());
PR: #60047 від @kevinb1989
# Інтерфейс PreparesForDispatch
Новий інтерфейс PreparesForDispatch додає метод prepareForDispatch(), який виконується перед відправкою завдання в чергу. Якщо метод поверне false, відправка буде скасована. Це корисно для дедуплікації або перевірки актуальності завдання.
use Illuminate\Contracts\Queue\PreparesForDispatch;
class SyncPodcastsJob implements ShouldQueue, PreparesForDispatch
{
use Queueable;
public function __construct(public array $podcastIds) {}
public function prepareForDispatch(): bool
{
$this->podcastIds = array_unique($this->podcastIds);
return count($this->podcastIds) > 0;
}
}
PR: #59879 від @jackbayliss
# Схема-хелпер foreignUuidFor
Метод foreignUuidFor() додає явний API для створення колонок із UUID-зовнішніми ключами в міграціях. Він автоматично визначає ім'я колонки та пов'язану таблицю на основі вказаного класу моделі.
$table->foreignUuidFor(User::class)->constrained();
PR: #60091 від @Tresor-Kasenda
# Динамічний backoff у ThrottlesExceptions
Метод backoff() у посереднику ThrottlesExceptions тепер приймає Closure. Це дозволяє встановлювати час очікування динамічно, наприклад, зчитуючи заголовок Retry-After із винятку зовнішнього API.
PR: #60103 від @cosmastech
# Підтримка Enum у контекстних атрибутах
Контекстні атрибути #[Auth], #[Authenticated] та #[Cache] тепер приймають Enum. Це спрощує роботу з guard-ами та сховищами кешу при впровадженні залежностей:
public function __construct(
#[Auth(AuthGuard::Admin)]
protected Guard $adminGuard,
) {}
PR: #60092 від @Tresor-Kasenda
# Інші виправлення та покращення
- Підтримка Scoped-дисків у Cloud —
Storage::cloud()тепер працює зі scoped-дисками (#60030). - Назви подій міграцій — події
MigrationStartedтаMigrationEndedтепер містять ім'я міграції (#60059). - Код виходу при таймауті воркера — додано можливість налаштувати код виходу через
WORKER_TIMEOUT_EXIT_CODE(#60072). - Виправлення Guzzle PSR-7 multipart — покращено серіалізацію вкладених масивів (#59984).
- Generic-типи для пагінації — краща підтримка IDE для методів пагінації в
Builder(#60045). - Скидання Lottery в тестах — стан
Lotteryтепер очищується після кожного тесту (#60083).
Посилання