Цього тижня команда Laravel випустила версію 12.29.0, яка включає нову локальну сторінку для відлагодження, драйвер кеш-сесій, PHP-атрибути для ресурсів моделей та багато іншого
# Нова локальна сторінка для відлагодження
Рюта Хамасакі та Джеремі Батлер представили нову локальну сторінку помилок для застосунків Laravel. Вона зберігає кнопку "Копіювати як Markdown", введену в Laravel 12.25, і автоматично визначає режим світла/темряви, замість ручного перемикання
Деталі можна знайти у Pull Request #57036
# Драйвер кеш-сесій
Жоао Педру Лопес разом з розробниками з громади та членами команди Laravel створили драйвер кеш-сесій. Рекомендуємо ознайомитися з обговоренням та кодом у Pull Request #56887. Ось приклад стабільних з'єднань з базами даних через запити:
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Context;
use Illuminate\Support\Facades\Date;
use Illuminate\Support\Facades\DB;
use Symfony\Component\HttpFoundation\Response;
class StickyWriteConnections
{
public function handle(Request $request, Closure $next): Response
{
if (!$request->hasSession()) {
return $next($request);
}
$expiry = $request->session()->cache()->get('use_write_connection_until');
$expiry?->isFuture()
&& DB::connection('pgsql')->useWriteConnectionWhenReading()
&& Context::addHidden('use_write_connection_until', $expiry);
$response = $next($request);
(DB::getConnections()['pgsql'] ?? null)?->hasModifiedRecords()
&& $request->session()->cache()->remember('use_write_connection_until', 10);
return $response;
}
}
# Атрибути UseResource та UseResourceCollection
Лука Патера додав можливість визначення ресурсних класів безпосередньо в моделі за допомогою атрибутів PHP. Це дозволяє уникнути зайвого коду при перетворенні моделі в ресурс:
// Раніше
$model->toResource(MyCustomNameResource::class);
$collection->toResourceCollection(MyCustomNameCollectionResource::class);
// Тепер
$model->toResource();
$collection->toResourceCollection();
Атрибути моделі визначаються в класі моделі таким чином:
use App\Http\Resources\MyCustomNameResource;
use App\Http\Resources\MyCustomNameCollectionResource;
#[UseResource(MyCustomNameResource::class)]
#[UseResourceCollection(MyCustomNameCollectionResource::class)]
class MyModel extends Model {}
Деталі можна знайти у Pull Request #56966
# JSON-формат для команди schedule:list
Денні Фостер додав параметр --json до команди schedule:list Artisan. Повернення даних у форматі JSON корисно для моніторингу розгортання та інтеграцій. Ось приклад з пул-реквесту:
[
{
"expression": "0 0 15 * *",
"repeat_seconds": null,
"command": "php artisan backup:run",
"description": "Запустити процес резервного копіювання щоденно",
"next_due_date": "2025-09-15 00:00:00 +00:00",
"next_due_date_human": "через 5 днів",
"timezone": "UTC",
"has_mutex": false
}
]
Це дозволяє запускати зручні команди, підключаючи такі інструменти, як jq, для моніторингу наявності запланованих завдань під час розгортання:
php artisan schedule:list --json | jq '.[] | select(.command | contains("backup"))'
# Примітки до випуску
Повний список нових можливостей та оновлень ви можете знайти нижче. А також порівняння між версіями 12.28.0 та 12.29.0 на GitHub. Примітки щодо випуску взято з changelog:
# v12.29.0
- Гарантувати, що кешовані та некешовані маршрути мають однакову пріоритетність при вирішенні дій і назв від @timacdonald в https://github.com/laravel/framework/pull/56920
- [12.x] Відновити раніше закоментовані твердження від @AhmedAlaa4611 в https://github.com/laravel/framework/pull/56930
- [12.x] Перенести записи .gitignore для узгодженості та зручності читання від @AhmedAlaa4611 в https://github.com/laravel/framework/pull/56963
- [12.x] SQLite: Дозволити налаштування будь-яких прагмів від @stancl в https://github.com/laravel/framework/pull/56962
- Рефакторинг: видалити невикористовуваний масив з docblock від @alipowerful7 в https://github.com/laravel/framework/pull/56961
- PendingResourceRegistration без проміжного програмного забезпечення ніколи не повертає масив від @moshe-autoleadstar в https://github.com/laravel/framework/pull/56959
- [12.x] Дозволити відсутність встановленого "fakerphp/faker" від @SjorsO в https://github.com/laravel/framework/pull/56953
- [12.x] Виправити placeholderHash у PHPDoc валідатора від @AhmedAlaa4611 в https://github.com/laravel/framework/pull/56947
- [12.x] Обробка innodb_snapshot_isolation=ON в MariaDB від @Muffinman в https://github.com/laravel/framework/pull/56945
- [12.x] Додати параметр ігнорування чисел для PhpRedis пакетів від @tuandp в https://github.com/laravel/framework/pull/56941
- тест(підтримка): додати крайові випадки для preg_replace_array від @realpvz в https://github.com/laravel/framework/pull/56937
- [12.x] Дозволити використання BackedEnum в динамічних компонентах blade від @gehrisandro в https://github.com/laravel/framework/pull/56940
- [12.x] Видалити один надмірний доступ до масиву від @vincentvanhoven в https://github.com/laravel/framework/pull/56931
- [12.x] Додати безGlobalScopesExcept() для збереження лише вказаних глобальних скопів від @theHocineSaad в https://github.com/laravel/framework/pull/56957
- [12.x] Зробити видимість однаковою від @AhmedAlaa4611 в https://github.com/laravel/framework/pull/56970
- [12.x] Змінити список на кортеж в PHPDoc блоці від @shaedrich в https://github.com/laravel/framework/pull/56967
- [12.x] Поліпшити docblocks для AggregateServiceProvider від @cosmastech в https://github.com/laravel/framework/pull/56968
- [12.x] додати параметр --whisper до команди schedule:work від @thojo0 в https://github.com/laravel/framework/pull/56969
- [12.x] Оновити пропозицію Faker відповідно до версії скелета від @AhmedAlaa4611 в https://github.com/laravel/framework/pull/56974
- Рефакторинг: використовувати str_contains() замість strpos() для ясності від @arshidkv12 в https://github.com/laravel/framework/pull/56979
- [12.x] видалити зайвий виклик
with()від @browner12 в https://github.com/laravel/framework/pull/56975 - [12.x] Конфігурація: перемістити деякі елементи в прагми від @AhmedAlaa4611 в https://github.com/laravel/framework/pull/56980
- Додати підтримку зворотного виклику для takeUntilTimeout в LazyCollection від @kamilkozak в https://github.com/laravel/framework/pull/56981
- [12.x] Використовувати PHP функцію is_finite() від @AhmedAlaa4611 в https://github.com/laravel/framework/pull/56990
- [12.x] Використання просування властивостей у
MessageLoggedі звуження$levelвід @cosmastech в https://github.com/laravel/framework/pull/56989 - [12.x] не використовувати
with()допомогу, коли другий аргумент не передається від @browner12 в https://github.com/laravel/framework/pull/56986 - [12.x] Виправити тип $handler з Connection::whenQueryingForLongerThan від @sethsandaru в https://github.com/laravel/framework/pull/56987
- [12.x] Деякі швидкі виправлення від @theHocineSaad в https://github.com/laravel/framework/pull/56991
- тести: Гарантувати, щоб зворотні виклики транзакцій виконувалися у порядку FIFO від @realpvz в https://github.com/laravel/framework/pull/56973
- Передати параметри $attributes та $parent у Factory Sequence від @fritz-c в https://github.com/laravel/framework/pull/56972
- [12.x] - Підтримка
CastableвEnumвід @jrseliga в https://github.com/laravel/framework/pull/56977 - [12.x] додати заключні коми в багаторядкових сигнатурах методів від @browner12 в https://github.com/laravel/framework/pull/56992
- [12.x] Поліпшити docblocks для параметрів, які можуть бути нульовими від @amirhshokri в https://github.com/laravel/framework/pull/56995
- [12.x] Поліпшити docblocks для параметрів, які можуть бути нульовими від @amirhshokri в https://github.com/laravel/framework/pull/56996
- [12.x] Поліпшити docblocks для параметрів, які можуть бути нульовими від @amirhshokri в https://github.com/laravel/framework/pull/56997
- Відмінити "[12.x] Конфігурація: перемістити деякі елементи в прагми" від @taylorotwell в https://github.com/laravel/framework/pull/57003
- [12.x]: Драйвер кеш-сесій від @joaopalopes24 в https://github.com/laravel/framework/pull/56887
- [12.x] Додати підтримку атрибутів #[UseResource(...)] та #[UseResourceCollection(...)] у моделях від @Lukasss93 в https://github.com/laravel/framework/pull/56966
- [12.x] Поліпшення тестів від @crynobone в https://github.com/laravel/framework/pull/57010
- [12.x] Поліпшення тестів від @crynobone в https://github.com/laravel/framework/pull/57031
- [12.x] Безкінечний ланцюг методів у контекстному зв’язуванні будівельника від @daniser в https://github.com/laravel/framework/pull/57026
- [12.x] Поліпшені типи в'яжучих від @daniser в https://github.com/laravel/framework/pull/57024
- Оновлення vite з 5.4.19 до 5.4.20 в /src/Illuminate/Foundation/resources/exceptions/renderer від @dependabot[bot] в https://github.com/laravel/framework/pull/57009
- [12.x] Виправити типи docblock для кешу APC від @xurshudyan в https://github.com/laravel/framework/pull/57020
- [12.x] Додати динамічний метод tries() до Queueable Listeners від @glioympas в https://github.com/laravel/framework/pull/57014
- [12.x] Додати параметр --json до ScheduleListCommand від @dxnter в https://github.com/laravel/framework/pull/57006
- [12.x] Спрощення виклику допомоги
with()від @browner12 в https://github.com/laravel/framework/pull/57041 - [12.x] Обробка всіх типів Enum для значень за замовчуванням від @browner12 в https://github.com/laravel/framework/pull/57040
- [12.x] Рефакторинг ланцюгів методів для зручності читання від @AhmedAlaa4611 в https://github.com/laravel/framework/pull/57050
- [12.x] Поліпшити формулювання docblock від @AhmedAlaa4611 в https://github.com/laravel/framework/pull/57056
- [12.x] Рефакторинг ланцюга викликів методів для зручності читання від @AhmedAlaa4611 в https://github.com/laravel/framework/pull/57054
- [12.x] Оновлення локальної сторінки помилок від @avosalmon в https://github.com/laravel/framework/pull/57036
- [12.x] Додати можливість контролювати код виходу через перевищення пам'яті QueueWorker від @jackbayliss в https://github.com/laravel/framework/pull/57044
- [12.x] Гарантувати, що
laravel-cloud-socketпідкорюєтьсяLOG_LEVELвід @PeteBishwhip в https://github.com/laravel/framework/pull/57071