Команда Laravel випустила версію 12.45 з JsonApiResource, класом касту AsBinary, помічником для вкладень із хмарного сховища та іншими оновленнями.
JSON:API ресурс
Mior Muhammad Zaki додав JsonApiResource, який дозволяє виводити API-ресурси за специфікацією JSON:API замість звичного JsonResource:
use Illuminate\Http\Resources\JsonApi\JsonApiResource;
class UserResource extends JsonApiResource {}
Створювати JSON API-ресурси можна командою make:resource з прапорцем --json-api:
php artisan make:resource PostResource --json-api
Деталі реалізації — Pull Request #57571.
Клас AsBinary для кастів
Kacper Pruszyński додав каст AsBinary, який зберігає значення у вигляді бінарних байтів і повертає їх у PHP як рядок:
protected function casts(): array
{
return [
'id' => AsBinary::uuid(isRequired: true),
'public_id' => AsBinary::ulid(), // optional by default
'custom' => AsBinary::of('xor1', false),
];
}
Деталі реалізації — Pull Request #58254.
Помічник для вкладень із хмарного сховища
Philo Hermans додав метод вкладення fromCloudStorage(), який спрощує додавання до листів файлів із хмари:
// Before:
Attachment::fromStorageDisk(Storage::getDefaultCloudDriver(), $attachment->path);
// After:
Attachment::fromCloudStorage($attachment->path);
Деталі реалізації — Pull Request #58201.
Підтримка BackedEnum для ключів сесії
Andy Hinkle додав підтримку enum для ключів сесії — тепер можна передавати сам enum замість рядкового значення. Це узгоджується з іншими частинами фреймворка:
enum CheckoutSession: string
{
case Cart = 'checkout.cart';
case ShippingAddress = 'checkout.shipping_address';
case PaymentMethod = 'checkout.payment_method';
}
// Before
session()->put(CheckoutSession::Cart->value, $items);
session()->get(CheckoutSession::Cart->value);
// After (>=12.45)
session()->put(CheckoutSession::Cart, $items);
session()->get(CheckoutSession::Cart);
Деталі реалізації — Pull Request #58241.
BackedEnum для ключів кешу
За аналогією з підтримкою enum у сесіях, Jack Bayliss додав BackedEnum для ключів кешу:
// Before
Cache::put(AnalyticalGraph::PROFILE->value, $result);
// After
Cache::put(AnalyticalGraph::PROFILE, $result);
Деталі реалізації — Pull Request #58246.
Позначити email як непідтверджений
Ali Khosrojerdi додав метод markEmailAsUnverified() як доповнення до markEmailAsVerified() для скидання підтвердження email у записі моделі:
$user->markEmailAsUnverified();
Деталі реалізації — Pull Request #58255.
Прапорець --readable для env:encrypt (видимі імена ключів)
Додає прапорець
--readableдо командиenv:encrypt, який генерує по-рядковий зашифрований формат: імена змінних залишаються видимими, а значення шифруються. Це дозволяє бачити, які змінні існують, не розкриваючи конфіденційні дані, і полегшує перегляд пул-реквестів — рев'ювери бачать, які змінні додано, видалено або перейменовано, без дешифрування файлу.
Деталі реалізації — Pull Request #58262.
Нотатки релізу v12.45.0
Повний перелік нових можливостей і змін дивіться нижче, а також diff між 12.44.0 та 12.45.0 на GitHub. Наступні нотатки взяті з changelog:
Зміни v12.45.0
- [12.x] JSON:API ресурс — @crynobone у https://github.com/laravel/framework/pull/57571
- [12.x] Додано статичний конструктор до guest middleware — @rodrigopedra у https://github.com/laravel/framework/pull/58204
- [12.x] Додано JsonResource до результату ModelInspector — @cosmastech у https://github.com/laravel/framework/pull/58205
- [12.x] Додано події queue paused / resume — @jackbayliss у https://github.com/laravel/framework/pull/58202
- [12.x] Додано helper-метод для вкладення з хмарного сховища — @PhiloNL у https://github.com/laravel/framework/pull/58201
- [12.x] Нормалізація APP_URL при генерації filesystem URL-ів — @congkv у https://github.com/laravel/framework/pull/58210
- [12.x] Відкориговано AuthDatabaseTokenRepositoryTest — @jackbayliss у https://github.com/laravel/framework/pull/58206
- [12.x] Рефакторинг логіки queuePaused — @amirhshokri у https://github.com/laravel/framework/pull/58215
- Виправлено хибні таймаути queue:listen після сну/пробудження системи — @ranjith67 у https://github.com/laravel/framework/pull/58216
- Змінено remember cookie: зберігається MAC від хешу пароля замість реального хешу — @Synchro у https://github.com/laravel/framework/pull/58107
- Додано дані підключення до повідомлень QueryException — @mathiasgrimm у https://github.com/laravel/framework/pull/58218
- [12.x] Відкориговано бейдж статусу тестів у README — @jackbayliss у https://github.com/laravel/framework/pull/58222
- [12.x] Використано константу для довжини session ID — @miladev95 у https://github.com/laravel/framework/pull/58224
- [12.x] Додано типові тести для PendingRequest.php — @shaedrich у https://github.com/laravel/framework/pull/58232
- feat: JobAttempted тепер викликається й для sync jobs — @veeshpath у https://github.com/laravel/framework/pull/58228
- [12.x] Оновлено докблок getEventDispatcher, дозволено повернення null — @jackbayliss у https://github.com/laravel/framework/pull/58242
- [12.x] Винесено диспатч JobAttempted в окремий метод у SyncQueue — @amirhshokri у https://github.com/laravel/framework/pull/58240
- [12.x] ValidationException: оновлено визначення redirectTo, додано null — @cheack у https://github.com/laravel/framework/pull/58238
- [12.x] Додано підтримку BackedEnum для ключів сесії — @ahinkle у https://github.com/laravel/framework/pull/58241
- [12.x] Оновлено дію upload-artifact — @jackbayliss у https://github.com/laravel/framework/pull/58250
- [12.x] Дозволено BackedEnum для ключів Cache — @jackbayliss у https://github.com/laravel/framework/pull/58246
- [12.x] Додано подію CommandFailed і listenForFailures() для Redis-з'єднань — @miladev95 у https://github.com/laravel/framework/pull/58251
- [12.x] Виправлення: замінено BackedEnum на UnitEnum у трейті Authorizable — @webard у https://github.com/laravel/framework/pull/58258
- [12.x] Рефакторинг: прибрано if і замінено ? — @alipowerful7 у https://github.com/laravel/framework/pull/58256
- [12.x] Фіча (MustVerifyEmail): додано markEmailAsNotVerified() — @alipowerful7 у https://github.com/laravel/framework/pull/58255
- [12.x] Фіча: додано havingNotBetween, orHavingBetween та orHavingNotBetween — @alipowerful7 у https://github.com/laravel/framework/pull/58259
- [12.x] Форматування — @amirhshokri у https://github.com/laravel/framework/pull/58266
- [12.x] Рефакторинг: додано |null у докблок — @alipowerful7 у https://github.com/laravel/framework/pull/58268
- Додано type guard для властивості chained у ChainedBatch/Queueable перед array_shift — @cyppe у https://github.com/laravel/framework/pull/58264
- [12.x] Додано атрибути lang до mail layout — @DBawazir2002 у https://github.com/laravel/framework/pull/58274
- [12.x] Прибрано зайве в докблоках Builder — @amirhshokri у https://github.com/laravel/framework/pull/58270
- [12.x] Запуск очищення Mockery через PHPUnit subscriber замість явних викликів
m::close()— @lucasmichot у https://github.com/laravel/framework/pull/58278 - [12.x] Виправлено відкладені Redis-джоби при увімкненій серіалізації phpredis — @iazaran у https://github.com/laravel/framework/pull/58235
- [12.x] Додано відсутній тип повернення до
Arr::array()— @mischasigtermans у https://github.com/laravel/framework/pull/58280 - [12.x] Додано прапорець
--readableдоenv:encryptдля видимих імен ключів — @mathiasgrimm у https://github.com/laravel/framework/pull/58262 - [12.x] Оновлено тип параметра fake-методу для disk — @murilo-plantae у https://github.com/laravel/framework/pull/58285
- [12.x] Виправлено опечатку в імені методу
BelongsToMany::createOrFirst— @mischasigtermans у https://github.com/laravel/framework/pull/58284 - [12.x] Виправлено
nth(),split()іsplitIn()— тепер кидаютьInvalidArgumentExceptionдля некоректних параметрів — @mischasigtermans у https://github.com/laravel/framework/pull/58283 - [12.x] Виправлено
Str::chopStart()таStr::chopEnd(), щоб не повертали порожній рядок при пустому needle — @mischasigtermans у https://github.com/laravel/framework/pull/58286 - [12.x] Додано клас касту
AsBinary— @plumthedev у https://github.com/laravel/framework/pull/58254 - [12.x] Додано enum до
persistentFake()та тести — @jackbayliss у https://github.com/laravel/framework/pull/58287 - Оновлено ім'я автора в Inspiring Quote — @kerog у https://github.com/laravel/framework/pull/58292
- [12.x] Виправлення: додано
@throws \InvalidArgumentExceptionдо деяких докблоків — @alipowerful7 у https://github.com/laravel/framework/pull/58289 - [12.x] Виправлено використання
Validator::sometimes()з атрибутами, що містять.— @crynobone у https://github.com/laravel/framework/pull/58291 - [12.x] Підтримка "where subquery between values" — @gdebrauwer у https://github.com/laravel/framework/pull/58290
- Додано фіксацію PDO read/write type для подій запитів — @timacdonald у https://github.com/laravel/framework/pull/58156