Команда Laravel випустила версію 12.6.0, що включає новий метод Eloquent fillAndInsert(), хелпер для сегментів URL, метод appliedRules() для Password та інші цікаві оновлення
# Дозволяє об'єднувати атрибути моделі перед вставкою
Люк Кузміш додав метод fillAndInsert(), який дозволяє “в ручному режимі кастувати значення до примітивів, встановлювати часові мітки та UUID”:
ModelWithUniqueStringIds::fillAndInsert([
[
'name' => 'Тейлор', 'role' => IntBackedRole::Admin, 'role_string' => StringBackedRole::Admin,
],
[
'name' => 'Нуном', 'role' => 3, 'role_string' => 'admin',
],
[
'name' => 'Дріс', 'uuid' => 'bbbb0000-0000-7000-0000-000000000000',
],
[
'name' => 'Кріс',
],
]);
Докладніше в Запиті на злиття #55038.
# Додати виключення HTTP-запиту
Люк Кузміш розробив метод requestException() для випадків, коли вам потрібно вручну створити виключення для HTTP-клієнта:
// До
$exception = new RequestException(
new Response(
Http::response(['code' => 'not_found', 404])->wait()
)
);
// Після
$exception = Http::requestException(['code' => 'not_found'], 404);
Деталі дивіться в Запиті на злиття #55241.
# Хелпер-метод для сегментів URL
Честер Сайкс додав новий метод pathSegments() до класу Uri, який повертає частини шляху URI у вигляді колекції:
$uri = Uri::of('https://laravel.com/one/two/three');
// Вручну
$firstSegment = collect(explode('/', $uri->path()))->first(); // 'one'
// Використовуючи метод pathSegments()
$firstSegment = $uri->pathSegments()->first();
# Метод appliedRules для Password
@devajmeireles представив метод appliedRules() для флюїдного конструктора правил Password. Метод appliedRules() повертає масив правил валідації пароля та їх статуси використання
Гляньте на приклад коду для визначення правил пароля вашого додатку:
Password::defaults(function () {
return Password::min(8)
->mixedCase()
->numbers();
});
// У вигляді
return view('livewire.profile', [
'appliedRules' => Password::default()->appliedRules(),
]);
<div>
<form wire:submit="save">
<div>
<x-input label="Password" />
<span>{{ __('Пароль має містити не менше :min символів.', ['min' => $appliedRules['min']]) }}</span>
@if ($appliedRules['mixedCase'] === true)
<span>{{ __('Пароль має містити хоча б одну велику та одну маленьку літеру.') }}</span>
@endif
@if ($appliedRules['numbers'] === true)
<span>{{ __('Пароль має містити хоча б одну цифру.') }}</span>
@endif
</div>
<x-button type="submit">
Зберегти
</x-button>
</form>
</div>
Деталі реалізації в Запиті на злиття #55206.
# Дозволити заборону команди db:seed
Бенедикт Франке додав можливість заборони команди SeedCommand у певних середовищах. SeedCommand не забороняється при виклику prohibitDestructiveCommands(), проте після Запиту на злиття #55238 ви можете заборонити команду db:seed таким чином:
DB::prohibitDestructiveCommands();
SeedCommand::prohibit();
# Не зупиняти процес вирізання, якщо модель не вдалася
Гюнтер Дебрауер оновив команду model:prune, щоб процес продовжувався навіть після виникнення виключення:
Коли ви виконуєте команду model:prune, і під час вирізання однієї моделі виникає виключення, вся команда завершується невдало. У мене була подібна проблема нещодавно в проєкті. Це призвело до того, що жодна модель не була вирізана, поки я не виправив помилку, що заважала вирізанню однієї моделі
Цей PR це виправляє. Команда model:prune пропускатиме моделі, які не можуть бути вирізані, та звітуватиме про виключення, що сталися під час вирізання цих моделей
Деталі в Запиті на злиття #55237.
# Нотатки про випуск
Ви можете переглянути повний список нових функцій та оновлень нижче, а також зміни між версіями 12.5.0 та 12.6.0 на GitHub. Наступні нотатки про випуск безпосередньо з чейнджлогу:
# v12.6.0
- [12.x] Не зупиняти вирізання, якщо виникає помилка при вирізанні однієї моделі від @gdebrauwer в https://github.com/laravel/framework/pull/55237
- [12.x] Оновлення з коментарями в документі фасаду Date від @fdalcin в https://github.com/laravel/framework/pull/55235
- Заборонити команду
db:seedвід @spawnia в https://github.com/laravel/framework/pull/55238 - [12.x] Введення методу
Rules\Password::appliedRulesвід @devajmeireles в https://github.com/laravel/framework/pull/55206 - [12.x] Дозволити об'єднання атрибутів моделі перед вставкою через
Model::fillAndInsert()від @cosmastech в https://github.com/laravel/framework/pull/55038 - [12.x] Виправлення типізування для DateTimeZone і DateTimeInterface у DateFactory від @AndrewMast в https://github.com/laravel/framework/pull/55243
- [12.x] Виправлення коментарів типів у документі DateFactory від @AndrewMast в https://github.com/laravel/framework/pull/55244
- Перелік відсутньої
migrate:rollbackу PhpDoc DB::prohibitDestructiveCommands від @spawnia в https://github.com/laravel/framework/pull/55252 - [12.x] Додано
Http::requestException()від @cosmastech в https://github.com/laravel/framework/pull/55241 - Новий: Хелпер-метод
pathSegments()для Uri від @chester-sykes в https://github.com/laravel/framework/pull/55250 - [12.x] Не вимагати повернення екземпляра Builder з методу локальної області від @cosmastech в https://github.com/laravel/framework/pull/55246