Цього тижня команда Laravel випустила версію v11.30, яка включає нові тестові хелпери defer, можливість визначати унікальні рядкові ID для моделей Eloquent, використання бонусних Enums з AuthorizesRequests та багато іншого
Тім МакДональд додав тестові хелпери withoutDefer() та withDefer(). Використання withoutDefer() корисне, коли ви працюєте з тестами, що використовують defer, але потрібно його відключити, щоб перевірити результат відкладеного виклику:
// ❌ не працює
User::create(/* ... */);
$this->assertAgainstSomeDeferredOutcome();
// ✅ працює
$this->withoutDefer();
User::create(/* ... */);
$this->assertAgainstSomeDeferredOutcome();
Деталі реалізації цих хелперів можна знайти у Pull Request #53340.
Люк Кузміш оновив код для трейтов 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.
Йоган ван Хелден оновив трейт 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. Нижче наведено примітки до випуску, які безпосередньо взято з чек-листу:
$bind до Blade::directive від @hossein-zare у Pull Request.trans_choice(), коли в заміні перекладів використовується розділювач | від @crynobone у Pull Request.exists() замість count() від @browner12 у Pull Request.vector від @akr4m у Pull Request.dropColumnsIfExists, dropColumnIfExists та dropForeignIfExists від @eusonlito у Pull Request.dropColumnsIfExists, dropColumnIfExists та dropForeignIfExists" від @taylorotwell у Pull Request.HasUniqueStringIds від @cosmastech у Pull Request.withoutDefer і withDefer для тестування від @timacdonald у Pull Request.