Команда Laravel випустила версію 12.21.0, що включає атрибути singleton та scoped для контейнера, метод у запитах для перевірки, чи знаходиться значення між двома колонками, сувору перевірку чисел та булевих значень і багато іншого:
# Атрибути Singleton та Scoped для Контейнера
@riasvdv додав два атрибути PHP, які можна безпосередньо використовувати в класах, що розв'язуються через контейнер, без потреби в ручній реєстрації як scoped або singleton:
use Illuminate\Container\Attributes\Singleton;
use Illuminate\Container\Attributes\Scoped;
#[Singleton]
class MyService
{
}
#[Scoped]
class MyService
{
}
Докладніше про singleton та scoped singleton дивіться в документації Laravel.
# Перевірка, чи Значення Між Двома Колонками у Запитах
@DarkGhostHunter запропонував метод whereValueBetween() для перевірки, чи лежить значення між двома колонками в запитах:
Цей PR дозволяє розробнику перевіряти, чи належить певне значення між двома колонками через Query Builder.
Це доповнює методи whereBetween() та whereColumnsBetween(), оскільки вони не можуть перевіряти, чи значення (такі як ціле число або таймстемп) лежить між колонками. Розробник повинен самостійно привести значення або значення колонок, як і з попередніми методами.
use App\Models\Post;
// До
Post::whereRaw('? between "visible_from" and "visible_to"', now())->get();
Post::where('visible_from', '<=', now())->where('visible_to', '>=', now())->get();
// Після
Post::whereValueBetween(now(), ['visible_from', 'visible_to'])->get();
Чотири пов'язані методи Query Builder дивіться в Pull Request #56119:
whereValueBetween()orWhereValueBetween()whereValueNotBetween()orWhereValueNotBetween()
# Глобальне Вимкнення Відношень у Фабриках
Luke Kuzmish вніс можливість відключити створення батьківських відношень у фабриках за замовчуванням. Цю функцію можна використовувати для забезпечення того, щоб не створювалися дані відношень. Для цього використовуйте статичні методи dontExpandRelationshipsByDefault() та expandRelationshipsByDefault() у фабриці:
public function test_has_one_editor_permission_returns_true(): void
{
UserPermissionFactory::dontExpandRelationshipsByDefault();
$collection = new UserPermissionCollection([
UserPermission::factory()
->withoutParents()
->make([
'type' => 'viewer',
'company_id' => 2,
'product_id' => 789,
]),
UserPermission::factory()
->withoutParents()
->make([
'type' => 'editor',
'company_id' => 2,
'product_id' => 432,
]),
]);
$result = $collection->hasEditorForCompany(2);
$this->assertTrue($result);
}
Деталі дивіться в Pull Request #56154.
# Отримання URI як Instance Stringable
@Kyrch додав метод toStringable() для отримання URI як Stringable instance:
// До
Str::of(Uri::of('http://localhost')->withScheme('https'));
// Після
Uri::of('http://localhost')->withScheme('https')->toStringable();
# Сувора Перевірка Чисел та Булевих Значень
Peter Fox додав сувору перевірку чисел та булевих значень, яка додатково перевіряє тип значення під час валідації:
use Illuminate\Support\Facades\Validator;
// Числове
Validator::make(['foo' => '1'], ['foo' => 'numeric:strict']); // не проходить
Validator::make(['foo' => 1], ['foo' => 'numeric:strict']); // проходить
// Булеве
Validator::make(['foo' => true], ['foo' => 'boolean:strict']); // проходить
Validator::make(['foo' => '1'], ['foo' => 'boolean:strict']); // не проходить
Документацію оновлено щодо булевих та числових правил.
# Методи для Перевірки Порожності
Christian Worreschk додав методи isEmpty() та isNotEmpty() до класу Fluent для визначення, чи є об'єкт порожнім:
$fluent = new Fluent([
'name' => 'Laravel News',
'url' => 'https://laravel-news.com',
]);
$fluent->isEmpty(); // false
$fluent->isNotEmpty(); // true
new Fluent()->isEmpty(); // true
new Fluent()->isNotEmpty(); // false
# Примітки до Випуску
Повний перелік нових можливостей та оновлень дивіться нижче, а також порівняння версій 12.20.0 та 12.21.0 на GitHub. Ці примітки безпосередньо з журналу змін:
# v12.21.0
- fix(vite): #55793 додати явний as-script до тегу link для модуля … від @midsonlajeanty в https://github.com/laravel/framework/pull/55794
- [12.x] Дозволити глобально вимкнути батьківські відносини у фабриках за допомогою
Factory::dontExpandRelationshipsByDefault()від @cosmastech в https://github.com/laravel/framework/pull/56154 - [12.x] Додати перевірку, чи значення між двома колонками від @DarkGhostHunter в https://github.com/laravel/framework/pull/56119
- [12.x] Забезпечити, що підключення до бази даних завжди відновлюється від @xurshudyan в https://github.com/laravel/framework/pull/56258
- [12.x] Виправити обробку об'єктів
HtmlableвJs::convertDataToJavaScriptExpression()від @jj15asmr в https://github.com/laravel/framework/pull/56253 - Зменшити непотрібні проміжні змінні від @LjjGit в https://github.com/laravel/framework/pull/56265
- [12.x] Поліпшити типи для
AbstractCursorPaginator@through()від @cosmastech в https://github.com/laravel/framework/pull/56267 - Використовувати
Dateфасад замістьtime()для перевіркиpassword_confirmed_atвід @dylanbr в https://github.com/laravel/framework/pull/56270 - [12.x] Виправити: Collection::transform() та Paginator::through() типи повернених значень від @calebdw в https://github.com/laravel/framework/pull/56273
- [12.x] Об’єднати 11.x у 12.x від @u01jmg3 в https://github.com/laravel/framework/pull/56289
- [12.x] Зменшити непотрібні проміжні змінні від @AhmedAlaa4611 в https://github.com/laravel/framework/pull/56288
- [12.x] Реорганізувати метод build для використання присвоєння з нульовим об'єктом для значення за замовчуванням від @Ashot1995 в https://github.com/laravel/framework/pull/56283
- [12.x] Невеликі поліпшення формату коду від @browner12 в https://github.com/laravel/framework/pull/56296
- [12.x] Використання більш специфічного повідомлення про виключення для маршрутизаційних маршрутів від @jessekoerhuis в https://github.com/laravel/framework/pull/56298
- [12.x] Виправити можливі не визначені змінні від @calfc в https://github.com/laravel/framework/pull/56292
- [12.x] Виправити: забезпечити метод
dailyAt()планувальника для парсингу хвилин та проігнорувати секунди, якщо секунди надані від @amirhshokri в https://github.com/laravel/framework/pull/56308 - [12.x] Дозволяє сувору булеву перевірку від @peterfox в https://github.com/laravel/framework/pull/56313
- Поліпшити вивід консолі
SeedCommandвід @Jehong-Ahn в https://github.com/laravel/framework/pull/56310 - [12.x] Додати єдину підтримку enum в документації фреймворку від @amirhshokri в https://github.com/laravel/framework/pull/56271
- [12.x] Дозволяє сувору числову перевірку від @peterfox в https://github.com/laravel/framework/pull/56328
- [12.x] Оновити анотації PHPDoc в
Validationвід @mrvipchien в https://github.com/laravel/framework/pull/56321 - [12.x] Додати підтримку класу операторів для просторових індексів GiST PostgreSQL від @joteejotee в https://github.com/laravel/framework/pull/56324
- Виправити парсинг значень масиву multipart у HTTP-клієнті (#55732) від @joteejotee в https://github.com/laravel/framework/pull/56302
- Виправлено помилку з блокуваннями ShouldBeUniqueUntilProcessing через Middleware від @TWithers в https://github.com/laravel/framework/pull/56318
- [12.x] додати очікувані результати на базі запитів до PendingCommand від @BinaryKitten в https://github.com/laravel/framework/pull/56260
- [12.x] Додано атрибути Singleton та Scoped до контейнера від @riasvdv в https://github.com/laravel/framework/pull/56334
- Виправити скидання моделі кастомного атрибуту при кастингу в об'єкт (#56335) від @guram-vashakidze в https://github.com/laravel/framework/pull/56343
- [12.x] Виправити/покращити пам'ять від @CharrafiMed в https://github.com/laravel/framework/pull/56345
- [12.x] Додати метод hasMailer до класу Mailable від @kevinb1989 в https://github.com/laravel/framework/pull/56340
- [12.x] Консистентне використання
mb_split()для розбиття рядків на слова від @shaedrich в https://github.com/laravel/framework/pull/56338 - [12.x] Додати toStringable до Uri від @Kyrch в https://github.com/laravel/framework/pull/56359
- [12.x] Виправити інтеграцію PHPStan від @crynobone в https://github.com/laravel/framework/pull/56369
- Додати 'isEmpty' та 'isNotEmpty' до Fluent від @cworreschk в https://github.com/laravel/framework/pull/56370
- [12.x] Додати метод mergeMetadata до класу Mailable від @kevinb1989 в https://github.com/laravel/framework/pull/56376
- Додати 'dontReportUsing' для фільтрації виключень, які потрібно відправити від @pelmered в https://github.com/laravel/framework/pull/56361