Команда 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.
Люк Кузміш розробив метод requestException() для випадків, коли вам потрібно вручну створити виключення для HTTP-клієнта:
// До
$exception = new RequestException(
new Response(
Http::response(['code' => 'not_found', 404])->wait()
)
);
// Після
$exception = Http::requestException(['code' => 'not_found'], 404);
Деталі дивіться в Запиті на злиття #55241.
Честер Сайкс додав новий метод pathSegments() до класу Uri, який повертає частини шляху URI у вигляді колекції:
$uri = Uri::of('https://laravel.com/one/two/three');
// Вручну
$firstSegment = collect(explode('/', $uri->path()))->first(); // 'one'
// Використовуючи метод pathSegments()
$firstSegment = $uri->pathSegments()->first();
@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.
Бенедикт Франке додав можливість заборони команди 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. Наступні нотатки про випуск безпосередньо з чейнджлогу:
db:seed від @spawnia в https://github.com/laravel/framework/pull/55238Rules\Password::appliedRules від @devajmeireles в https://github.com/laravel/framework/pull/55206Model::fillAndInsert() від @cosmastech в https://github.com/laravel/framework/pull/55038migrate:rollback у PhpDoc DB::prohibitDestructiveCommands від @spawnia в https://github.com/laravel/framework/pull/55252Http::requestException() від @cosmastech в https://github.com/laravel/framework/pull/55241pathSegments() для Uri від @chester-sykes в https://github.com/laravel/framework/pull/55250