Перетворення значень масиву в екземпляри Enum за допомогою методу mapInto у Laravel

0
Перекладено ШІ
Оригінал: Laravel News
Оновлено: 24 квітня, 2025
В роботі з енумами у Laravel новий метод Collection::mapInto робить все просто та зручно, надаючи перший клас підтримки PHP Enums. Дізнайтеся, як ефективно конвертувати сирі дані в типобезпечні екземпляри енумів для зручності обробки користувацького вводу

Робота з enum у Laravel стає простішою завдяки вдосконаленому методу Collection::mapInto, який тепер надає повноцінну підтримку для PHP Enums, спрощуючи конвертацію значень масиву в правильні екземпляри enum

Введення нативних enums у PHP 8.1 суттєво змінило підходи розробників до визначення наборів значень з типобезпекою. Laravel повністю використовує цю можливість, і метод Collection::mapInto тепер пропонує елегантний спосіб перетворення сирих даних у сильно типізовані екземпляри enum — особливо корисно при обробці вхідних даних, які потребують перетворення в case enum

Ось приклад використання методу:

public function store(Request $request)
{
    $request->validate([
        'statuses' => ['array'],
        'statuses.*' => [new Enum(OrderStatus::class)],
    ]);
 
    $statuses = $request
        ->collect('statuses')
        ->mapInto(OrderStatus::class);
 
    if ($statuses->contains(OrderStatus::Urgent)) {
        // Пріоритет для термінових замовлень
    }
}

Цей підхід виявляється особливо потужним у складних бізнес-логіках:

<?php
 
namespace App\Enums;
 
enum Permission: string
{
    case ViewDashboard = 'view_dashboard';
    case ManageUsers = 'manage_users';
    case EditContent = 'edit_content';
    case AccessReports = 'access_reports';
 
    public function isAdminLevel(): bool
    {
        return in_array($this, [
            self::ManageUsers,
            self::AccessReports
        ]);
    }
}
 
class RolePermissionsController extends Controller
{
    public function assign(Request $request)
    {
        $request->validate([
            'permissions' => ['array'],
            'permissions.*' => [new Enum(Permission::class)],
        ]);
 
        // Перетворення рядків у екземпляри Permission enum
        $permissions = $request
            ->collect('permissions')
            ->mapInto(Permission::class);
 
        // Перевірка адміністративних прав
        $requiresAdminPrivileges = $permissions
            ->filter(fn (Permission $permission) => $permission->isAdminLevel())
            ->isNotEmpty();
 
        if ($requiresAdminPrivileges && !$request->user()->isAdmin()) {
            return back()->withErrors([
                'permissions' => 'Необхідні адміністративні права для вибраних дозволів'
            ]);
        }
 
        // Призначення дозволів ролі
        $request->role()->permissions()->sync(
            $permissions->map->value->toArray()
        );
 
        return redirect()->route('roles.show', $request->role)
            ->with('message', 'Дозволи успішно оновлено');
    }
}

Метод mapInto автоматично створює кожен enum, передаючи початкове значення до конструктора класу enum. Для enum з рядковою основою це без зусиль перетворює сирі рядки, такі як 'view_dashboard', у відповідний case enum Permission::ViewDashboard, що забезпечує типобезпеку та дозволяє ефективно використовувати методи enum у вашій логіці додатка

Популярні

Logomark Logotype

Оптимізація запитів до бази даних за допомогою скорочених методів Laravel

Laravel пропонує зручні методи для роботи з датами, які значно спрощують запити до бази даних. Досліджуйте, як ці інтуїтивно зрозумілі функції допомагають створювати чіткі та зрозумілі умови для роботи з часовими даними!

Logomark Logotype

Laravel Boost — ваш стартовий набір для програмування з використанням штучного інтелекту

Вперше у світі Laravel з'являється можливість, яка значно спростить ваше повсякденне програмування завдяки новому пакету Laravel Boost. Читайте статтю, щоб дізнатися, як посилена інтеграція штучного інтелекту може підвищити ефективність вашої роботи та оптимізувати створення проектів у Laravel

Logomark Logotype

Використання штучного інтелекту для управління перекладами в Laravel

Досліджуйте нові можливості локалізації вашого Laravel-додатку з пакунками, які використовують штучний інтелект, такими як ChatGPT та Claude. Які рішення можуть спростити ваш процес перекладу та зробити його більш точним? Читайте далі, щоб дізнатися більше!