Цього тижня команда Laravel випустила версію v11.30, яка включає нові тестові хелпери defer, можливість визначати унікальні рядкові ID для моделей Eloquent, використання бонусних Enums з AuthorizesRequests та багато іншого
# Нові тестові хелпери withDefer() та withoutDefer()
Тім МакДональд додав тестові хелпери withoutDefer() та withDefer(). Використання withoutDefer() корисне, коли ви працюєте з тестами, що використовують defer, але потрібно його відключити, щоб перевірити результат відкладеного виклику:
// ❌ не працює
User::create(/* ... */);
$this->assertAgainstSomeDeferredOutcome();
// ✅ працює
$this->withoutDefer();
User::create(/* ... */);
$this->assertAgainstSomeDeferredOutcome();
Деталі реалізації цих хелперів можна знайти у Pull Request #53340.
# Введення трейту HasUniqueStringIds
Люк Кузміш оновив код для трейтов HasUuids та HasUlid, що дозволяє використовувати власні унікальні рядкові ID як ключі маршруту, не переозначуючи resolveRouteBindingQuery(). Ось приклад, як ви можете налаштувати типи унікальних рядків для вашої моделі:
trait HasTwrnsTrait
{
use HasUniqueStringIds;
public function newUniqueId()
{
return (string) Twrn::new();
}
protected function isValidKey($value): bool
{
return Twrn::isValid($value);
}
}
Це оновлення не вводить жодних руйнівних змін, адже моделі HasUuids і HasUlid тепер використовують трейт HasUniqueStringIds. Більше деталей у Pull Request #53280.
# Дозволити методу authorize() приймати Enums
Йоган ван Хелден оновив трейт AuthorizesRequests, щоб він міг безпосередньо приймати бонусні Enums. 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);
//
}
# Примітки до випуску
Ви можете переглянути повний список нових можливостей та оновлень нижче, а також зміни між версіями 11.29.0 та 11.30.0 на GitHub. Нижче наведено примітки до випуску, які безпосередньо взято з чек-листу:
# v11.30.0
- Додано параметр
$bindдоBlade::directiveвід @hossein-zare у Pull Request. - [11.x] Виправлено
trans_choice(), коли в заміні перекладів використовується розділювач|від @crynobone у Pull Request. - [11.x] Дозволено методу authorize приймати бонусні Enums безпосередньо від @johanvanhelden у Pull Request.
- [11.x] Використання
exists()замістьcount()від @browner12 у Pull Request. - [11.x] Поліпшення документації від @mtlukaszczyk у Pull Request.
- Дозволено додавати власні оператори Postgres від @boris-glumpler у Pull Request.
- [11.x] Підтримка необов'язкових вимірів для типу колонки
vectorвід @akr4m у Pull Request. - [11.x] Поліпшення тестування від @saMahmoudzadeh у Pull Request.
- [11.x] Додано
dropColumnsIfExists,dropColumnIfExistsтаdropForeignIfExistsвід @eusonlito у Pull Request. - [11.x] Надано повідомлення про помилку для PostTooLargeException від @patrickomeara у Pull Request.
- [11.x] Виправлено порушення цілісності даних при унікальності failed_jobs_uuid від @bytestream у Pull Request.
- Скасовано "[11.x] Додано
dropColumnsIfExists,dropColumnIfExistsтаdropForeignIfExists" від @taylorotwell у Pull Request. - [11.x] Введено
HasUniqueStringIdsвід @cosmastech у Pull Request. - [11.x] Рефакторинг: перевірка контекстних атрибутів перед отриманням імені класу параметра від @korkoshko у Pull Request.
- [11.x] Підбір існуючих видів та Markdown під час створення листів від @kevinb1989 у Pull Request.
- [11.x] Додано хелпери
withoutDeferіwithDeferдля тестування від @timacdonald у Pull Request.