Laravel 11.30: Крок уперед у тестуванні, ID моделей та авторизації

Laravel, популярний фреймворк для розробки веб-додатків на PHP, нещодавно випустив свою нову версію — 11.30. Цей оновлення приносить безліч нових функцій та покращень, які підвищують продуктивність розробників та гнучкість коду. Давайте розглянемо основні моменти цього релізу.

Нові допоміжні функції для тестування: withDefer() та withoutDefer()

Однією з видатних новинок у Laravel 11.30 є введення нових допоміжних функцій для тестування: withDefer() та withoutDefer(), які були додані Тімом МакДональдом. Ці функції особливо корисні, коли ви працюєте з тестами, що використовують відкладені виклики, але вам потрібно вимкнути їх для перевірки результату відкладеного виклику.

Ось приклад використання нової допоміжної функції withoutDefer():

 // Це не працюватиме
 User::create(/* ... */);
 $this->assertAgainstSomeDeferredOutcome();
 // Це працюватиме
 $this->withoutDefer();
 User::create(/* ... */);
 $this->assertAgainstSomeDeferredOutcome();

Ці допоміжні функції дають розробникам більше контролю над відкладеними операціями під час тестування, що дозволяє точніше перевіряти результати та покращує надійність тестів.

Користувацькі унікальні строкові ID з трейтом HasUniqueStringIds

Люк Кузміш представив трейтову функцію HasUniqueStringIds, яка дозволяє розробникам використовувати користувацькі унікальні строкові ID як ключі маршруту без необхідності перевизначати метод resolveRouteBindingQuery(). Це оновлення доповнює існуючі трейти HasUuids та HasUlid, даючи більше можливостей для генерації ID.

Ось приклад реалізації користувацьких унікальних строкових ID:

trait HasTwrnsTrait
{
    use HasUniqueStringIds;
public function newUniqueId()
{
    return (string) Twrn::new();
}

protected function isValidKey($value): bool
{
    return Twrn::isValid($value);
}

Ця функція дозволяє краще налаштувати ідентифікатори моделей, зберігаючи сумісність з існуючими конвенціями Laravel.

Покращена авторизація з підтримкою enum

Йоган ван Хелден оновив трейт AuthorizesRequests, щоб дозволити безпосередньо використовувати підключені enum. Це оновлення співвідноситься з нещодавніми оновленнями Laravel, що підтримують пряме використання Enums у різних частинах фреймворку.

Ось як тепер можна використовувати Enum з методом authorize():

enum DashboardPermission: string
{
    case VIEW = 'dashboard.view';
}
 // До
public function index(): Response
{
    $this->authorize(DashboardPermission::VIEW->value);
    // ...
}

// Після
public function index(): Response
{
    $this->authorize(DashboardPermission::VIEW);
    // ...
}

Це оновлення спрощує код авторизації та покращує типову безпеку при роботі з enum для дозволів.

Інші значущі покращення

Laravel 11.30 також включає кілька інших удосконалень:

  • Додано параметр $bind для Blade::directive для покращення функціональності директив Blade.
  • Виправлено роботу trans_choice(), коли заміни в перекладах містять роздільник |.
  • Покращена продуктивність за рахунок використання exists() замість count() у певних операціях.
  • Додано підтримку для власних операторів Postgres.
  • Введено необов'язкові вимірювання для типу стовпця vector.
  • Додано повідомлення про помилку для PostTooLargeException.
  • Виправлено порушення цілісності для failed_jobs_uuid_unique.

Laravel 11.30 демонструє прагнення фреймворку до постійного вдосконалення та впровадження функцій, зручних для розробників. Завдяки покращеним можливостям тестування, більш гнучким параметрам ID моделей і спрощеній авторизації з використанням enum, це оновлення дає розробникам нові інструменти для написання чистішого та ефективнішого коду. Як Laravel продовжує еволюціонувати, він залишатиметься популярним вибором серед розробників PHP, що шукають потужний і багатофункціональний фреймворк для веб-додатків.

Зацікавлені у тому, як я можу допомогти вам підвищити ваш бізнес за допомогою Laravel?

Зв'яжіться зі мною.

Перекладено з: Laravel 11.30: A Leap Forward in Testing, Model IDs, and Authorization

Leave a Reply

Your email address will not be published. Required fields are marked *