Генерація HTML-атрибута passwordrules у Laravel 13.9.0

Перекладено ШІ 0 Laravel News 15 травня, 2026

Laravel v13.9.0 представляє автоматичну генерацію правил для паролів та нові інструменти для моніторингу черг. Дізнайтеся, як ці оновлення та підтримка великих SQS-повідомлень оптимізують вашу розробку.

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() }}"
/>

Тепер, коли користувач фокусується на полі, браузер запропонує пароль, який гарантовано відповідає вашим правилам.

PR: #60070 від @imliam

# Метрики для Cloud-черг

Додано відстеження метрик для з'єднань Laravel Cloud. Новий декоратор Illuminate\Foundation\Cloud\Queue огортає драйвер черги та надсилає події через сокет при додаванні завдання, початку та завершенні його обробки. Це дає Laravel Cloud можливість моніторити пропускну здатність та тривалість роботи воркерів.

Також реалізовано підтримку кешування конфігурації для Cloud-черг: префікси та суфікси тепер зчитуються з файлів конфігурації, що забезпечує коректну роботу php artisan config:cache.

PRs: #60074, #60078, #60094

# Зберігання великих 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, видаляти файл після успішної обробки завдання.

PR: #59734 від @Orrison

# Підтримка таймауту в Concurrency::run()

Метод Concurrency::run() за замовчуванням використовує драйвер process із таймаутом 60 секунд. Тепер цей ліміт можна налаштовувати:

Concurrency::run([
    fn () => longRunningTask(),
], timeout: 300);

PR: #60105 від @dbpolito

# Умовна відправка у 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-дисків у CloudStorage::cloud() тепер працює зі scoped-дисками (#60030).
  • Назви подій міграцій — події MigrationStarted та MigrationEnded тепер містять ім'я міграції (#60059).
  • Код виходу при таймауті воркера — додано можливість налаштувати код виходу через WORKER_TIMEOUT_EXIT_CODE (#60072).
  • Виправлення Guzzle PSR-7 multipart — покращено серіалізацію вкладених масивів (#59984).
  • Generic-типи для пагінації — краща підтримка IDE для методів пагінації в Builder (#60045).
  • Скидання Lottery в тестах — стан Lottery тепер очищується після кожного тесту (#60083).

Посилання

Популярні

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

14 Оновлено 14 травня, 2026

Як задокументувати кілька API в Laravel за допомогою Scramble

Ви знали, що в одному додатку Laravel можна реалізувати кілька API? У нашій статті ви дізнаєтеся, як за допомогою Scramble легко документувати різні версії API та налаштувати доступ до документації, щоб зробити її публічною або приватною. Читайте далі, щоб дізнатися більше

19 Оновлено 14 травня, 2026

Використання штучного інтелекту для управління перекладами в Laravel

Досліджуйте нові можливості локалізації вашого Laravel-додатку з пакунками, які використовують штучний інтелект, такими як ChatGPT та Claude. Які рішення можуть спростити ваш процес перекладу та зробити його більш точним? Читайте далі, щоб дізнатися більше!

35 Оновлено 14 травня, 2026

4 поширені помилки Vite у Laravel

Використання Vite для створення фронтенд-ресурсів у вашому додатку Laravel може бути захоплюючим, але іноді ви можете стикнутися з певними помилками. У цій статті ми розглянемо чотири поширені помилки, з якими ви можете зіткнутися, а також підкажемо способи їх усунення, щоб ви могли знову зосередитися на розробці вашого додатку