Тимчасова область контексту в Laravel 12.1

Перекладено ШІ
Оригінал: Laravel News
Оновлено: 17 березня, 2025
Laravel презентує нову версію 12.1.0, яка вражає своїми оновленнями, включаючи методи `Arr::partition()` та `getRawSql()`, що значно полегшують роботу з масивами та запитами. Досліджуйте нові можливості та дізнайтеся, як ці зміни можуть поліпшити ваш досвід розробки в Laravel

Команда Laravel випустила версію v12.1.0 — перше незначне оновлення Laravel 12. Це оновлення включає метод контекстного охоплення, метод Arr::partition(), метод getRawSql() для обробки винятків запитів та інші нові можливості.

# Новий метод розподілу масиву

Ліам Дакетт додав метод partition до допоміжних функцій для масивів, що дозволяє використовувати логіку розподілу без колекцій:

$numbers = [0, 1, 2, 3, 4, 5];
 
// Використання колекцій
[$evens, $odds] = collect($numbers)->partition(fn(int $number) => $number % 2 === 0);
 
// Використання методу Arr::partition()
[$evens, $odds] = Arr::partition($numbers, fn(int $number) => $number % 2 === 0);

Цей метод розділяє масив на два відповідно до переданого зворотного виклику.

# Додано метод getRawSql() до винятків запитів

@erickcomp додав метод getRawSql() до класу QueryException, який повертає необроблене представлення SQL-запиту з вкладеними зв'язками. Цей метод можна використовувати для повідомлень про проблеми із запитами:

->withExceptions(function (Exceptions $exceptions) {
    $exceptions->report(function (QueryException $e) {
        // ...
        MyErrorServiceFacade::report('Помилка при виконанні SQL: ', $e->getRawSql());
    });
})

# Метод контекстного охоплення

Люк Кузміш додав метод Context::scope(), який дозволяє зберігати контекст під час виконання функції, а потім відновлювати його:

// До
Context::add('event_id', $event->id);
 
try {
    $this->innerHandle($event);
} finally {
    Context::forget(['event_id', 'sns_message_id']);
}
 
// Після
Context::scope(
    fn () => $this->innerHandle($event),
    ['event_id' => $event->id]
);

Більше про метод Context::scope() можна дізнатися в документації.

# Клас PendingCommand тепер підтримує тапування

Кевін Буї додав трейти Tappable до класу тестування PendingCommand, що дозволяє обробляти перевірки все за один раз:

$this->artisan('orders:refunding', ['--ids' => 1])
    ->expectsOutput('Початок повернення...')
    ->tap(function ($command) {
        // ...
        $command->expectsOutput('...');
    });

Дивіться Pull Request #54801 для повного прикладу.

# Примітки до випуску

Повний список нових функцій і оновлень ви можете знайти нижче, а також переглянути різницю між 12.0.0 і 12.1.0 на GitHub. Наступні примітки безпосередньо з чанглогу:

# v12.1.0