Локалізований парсинг чисел у Laravel 12.15

Перекладено ШІ
Оригінал: Laravel News
Оновлено: 22 травня, 2025
Оновлення Laravel до версії 12.15.0 принесло ряд захоплюючих нововведень, включаючи локаційне розпізнавання чисел та нові методи для спрощення обробки рядків. Хочете дізнатися більше про те, як ці зміни можуть полегшити вашу роботу з фреймворком? Читайте далі

Команда 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