Команда 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
- [12.x] Покращення тестів від @crynobone в https://github.com/laravel/framework/pull/54782
- [12.x] Виправлення неправильних типів у traits
BuildsWhereDateClausesвід @mohprilaksono в https://github.com/laravel/framework/pull/54784 - [12.x] Підвищення читабельності запитів від @hafezdivandari в https://github.com/laravel/framework/pull/54791
- [12.x] Покращення eventStream для підтримки кастомних подій та повідомлень початку від @devhammed в https://github.com/laravel/framework/pull/54776
- [12.x] Клас PendingCommand тепер підтримує тапування від @kevinb1989 в https://github.com/laravel/framework/pull/54801
- [12.x] Додано відсутній тип об'єднання в документацію event stream від @devhammed в https://github.com/laravel/framework/pull/54800
- Змінено типи повернення методів
paginate()на\Illuminate\Pagination\LengthAwarePaginatorвід @carestad в https://github.com/laravel/framework/pull/54826 - [12.x] Перевірка наявності методу
Hasher::verifyConfiguration()перед перенаправленням виклику від @rodrigopedra в https://github.com/laravel/framework/pull/54833 - [11.x] Виправлення використання касту
AsStringableв ключі Notifiable від @crynobone в https://github.com/laravel/framework/pull/54818 - Додано тести для обробки нульових первинних ключів і спеціальних значень у правилі унікальності від @alikhosravidev в https://github.com/laravel/framework/pull/54823
- Покращено docblock для методу with() для уточнення, що він додає до існуючого eager loading від @igorlealantunes в https://github.com/laravel/framework/pull/54838
- [12.x] Виправлення видалення таблиць з префіксами схеми від @hafezdivandari в https://github.com/laravel/framework/pull/54834
- [12.x] Додано
Context::scope()від @cosmastech в https://github.com/laravel/framework/pull/54799 - Дозволено записувати HTTP запити без підробки запитів від @kemp в https://github.com/laravel/framework/pull/54850
- [12.x] Додано новий метод "getRawSql" (з вкладеними зв'язками) до класу QueryException від @erickcomp в https://github.com/laravel/framework/pull/54849
- Оновлення Inspiring.php від @ju-gow в https://github.com/laravel/framework/pull/54846
- [12.x] Виправлення використання іменованих аргументів у фасаді
Dateта виправлення типу повернення від @lmottasin в https://github.com/laravel/framework/pull/54847 - Додано додаткові тести для сценаріїв валідації Rule::array від @alikhosravidev в https://github.com/laravel/framework/pull/54844
- [12.x] Видалити оператор повернення від @mohprilaksono в https://github.com/laravel/framework/pull/54842
- Виправлення друкарських помилок від @co63oc в https://github.com/laravel/framework/pull/54839
- [12.x] Не циклізувати середу, якщо виключено порожнє значення від @cosmastech в https://github.com/laravel/framework/pull/54837
- Додано тест для методу Arr::reject в Illuminate Support від @mohammadrasoulasghari в https://github.com/laravel/framework/pull/54863
- [12.x] Функція: Розподіл масивів від @liamduckett в https://github.com/laravel/framework/pull/54859
- [12.x] Запровадження
ContextLogProcessorвід @cosmastech в https://github.com/laravel/framework/pull/54851