Команда Laravel випустила версію v12.15.0, яка містить підтримку розуміння чисел з локалі, новий рядковий hash() допоміжний метод, можливість впроваджувати контекстні значення атрибутів та інші нововведення:
# Підтримка чисел з локалі
Mbungu Ngoma додав три методи до класу Number для перетворення локалізованих чисел у числові значення. Ці методи використовують клас NumberFormatter з розширення Intl для аналізу і визначення формату:
use Illuminate\Support\Number;
Number::parse($string);
Number::parseInt($string);
Number::parseFloat($string);
// Передати локаль
Number::parseFloat(string: $string, locale: 'de');
// Також можна передати тип для методу parse
Number::parse(
string: $string,
type: NumberFormatter::TYPE_INT64,
locale: 'de',
);
Деталі можна знайти у Pull Request #55725.
# Значення за замовчуванням при отриманні Enum
@elbojoloco додав можливість передавати значення за замовчуванням при отриманні enum через трейти InteractsWithData.php. Наприклад, оновлення включає класи, такі як Request:
// Раніше
$chartType = request()->enum('chart_type', ChartTypeEnum::class) ?: ChartTypeEnum::Bar;
// Тепер
$chartType = request()->enum('chart_type', ChartTypeEnum::class, ChartTypeEnum::Bar);
# Метод TestResponse для перевірки помилок клієнта
@shane-zeng додав метод assertClientError() для тестової відповіді:
// Раніше
$this->assertTrue($response->isClientError());
// Тепер
$response->assertClientError();
# Допоміжний метод hash для рядків
Istiak Tridip додав метод hash() до класу Stringable для спрощення хешування рядків:
$appId = str('secret-unique-key')
->hash('xxh3')
->take(10)
->prepend('app-');
// app-0fb8aac18c
До версії Laravel v12.15 для цього використовувався метод ->pipe(), який спрощено за допомогою hash():
// Раніше потрібно було вручну передавати рядок у метод хешування
$appId = str('secret-unique-key')
->pipe(fn(Stringable $str) => hash('xxh3', (string) $str))
->take(10)
->prepend('app-');
Деталі впровадження можна знайти в Pull Request #55767.
# Додавання current_page_url до Paginator
Mario Juárez додав current_page_url до Paginator:
$paginator->toArray()['current_page_url'];
# Перевірка редиректу на дію
Volodya Kurshudyan додав метод assertRedirectToAction() для перевірки редиректу на певну дію контролера:
$this->get('redirect-to-index')
->assertRedirectToAction([TestActionController::class, 'index']);
# Використання контекстних значень як атрибутів
Martin Bean додав атрибут #[Context()], який можна використовувати для впровадження значення контексту. Приклад з pull request демонструє повторне використання значення, визначеного у контексті:
use App\Models\User;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\Context;
class UserSeeder extends Seeder
{
public function run(): void
{
$user = User::factory()->create();
// Зберегти дані контексту для подальших сідерів...
Context::add('user', $user);
}
}
// Повторне використання контексту `$user` в ChannelSeeder
use App\Models\Channel;
use App\Models\User;
use Illuminate\Container\Attributes\Context;
use Illuminate\Database\Seeder;
class ChannelSeeder extends Seeder
{
public function run(
// Отримуємо дані контексту з типізуванням...
#[Context('user')] User $user,
): void {
$channel = Channel::factory()->create();
$channel->users()->attach($user);
}
}
Деталі впровадження можна знайти в Pull Request #55760.
# Нотатки про випуск
Ви можете ознайомитися з повним списком нових функцій і оновлень, а також з порівнянням 12.14.0 та 12.15.0 на GitHub. Нотатки про випуск безпосередньо з журналу змін:
# v12.15.0
- [12.x] Додано методи розуміння чисел з локалізацією до класу Number від @informagenie у https://github.com/laravel/framework/pull/55725
- [12.x] Додано значення за замовчуванням для отримання enum від @elbojoloco у https://github.com/laravel/framework/pull/55735
- Відмінено "[12.x] Оновлення "Number::fileSize" для використання правильного префікса та додавання параметра префікса" від @ziadoz у https://github.com/laravel/framework/pull/55741
- [12.x] Вилучено apc від @AhmedAlaa4611 у https://github.com/laravel/framework/pull/55745
- [12.x] Додано тип параметра для методів
assertJsonStructure&assertExactJsonStructureвід @milwad-dev у https://github.com/laravel/framework/pull/55743 - [12.x] Виправлено приведення типів для змінних середовища в конфігураційних файлах від @adamwhp у https://github.com/laravel/framework/pull/55737
- [12.x] Збереження "попереднього" стану моделі від @crynobone у https://github.com/laravel/framework/pull/55729
- [12.x] Проброс
getCountForPaginationна Eloquent\Builder від @cosmastech у https://github.com/laravel/framework/pull/55752 - [12.x] Додано метод
assertClientErrorдоTestResponseвід @shane-zeng у https://github.com/laravel/framework/pull/55750 - Виправлено команду Broadcasting для Livewire Starter Kit від @joshcirre у https://github.com/laravel/framework/pull/55774
- Уточнення одиниць для значень бенчмарку для доступності IDE від @mike-healy у https://github.com/laravel/framework/pull/55781
- Покращення PHPDoc Типів повернення для методів оригінального атрибута Eloquent від @clementbirkle у https://github.com/laravel/framework/pull/55779
- [12.x] Запобігання виклику винятків
preventsLazyLoadingпри використанніautomaticallyEagerLoadRelationshipsвід @devajmeireles у https://github.com/laravel/framework/pull/55771 - [12.x] Додано допоміжник
hashдля рядків від @istiak-tridip у https://github.com/laravel/framework/pull/55767 - [12.x] Оновлено підпис
assertSessionMissing()для відповідностіassertSessionHas()від @nexxai у https://github.com/laravel/framework/pull/55763 - Виправлення: команда php artisan db, якщо немає пароля від @mr-chetan у https://github.com/laravel/framework/pull/55761
- [12.x] Типи: InteractsWithPivotTable::sync від @liamduckett у https://github.com/laravel/framework/pull/55762
- [12.x] Додано
current_page_urlдо Paginator від @mariomka у https://github.com/laravel/framework/pull/55789 - Виправлено тип повернення в PhpDoc для методу командного збою від @Muetze42 у https://github.com/laravel/framework/pull/55783
- [12.x] Додано метод
assertRedirectToActionдля перевірки редиректу до дій контролера від @xurshudyan у https://github.com/laravel/framework/pull/55788 - [12.x] Додано контекстний атрибут Context від @martinbean у https://github.com/laravel/framework/pull/55760