Цього тижня команда 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.