Робота з 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 у вашій логіці додатка
Laravel пропонує зручні методи для роботи з датами, які значно спрощують запити до бази даних. Досліджуйте, як ці інтуїтивно зрозумілі функції допомагають створювати чіткі та зрозумілі умови для роботи з часовими даними!
Вперше у світі Laravel з'являється можливість, яка значно спростить ваше повсякденне програмування завдяки новому пакету Laravel Boost. Читайте статтю, щоб дізнатися, як посилена інтеграція штучного інтелекту може підвищити ефективність вашої роботи та оптимізувати створення проектів у Laravel
Досліджуйте нові можливості локалізації вашого Laravel-додатку з пакунками, які використовують штучний інтелект, такими як ChatGPT та Claude. Які рішення можуть спростити ваш процес перекладу та зробити його більш точним? Читайте далі, щоб дізнатися більше!