Найти в Дзене

Laravel Enum: Чистый, структурированный и удобный для разработчиков

Laravel Enum: Чистый, структурированный и удобный для разработчиков Теперь Laravel поддерживает нативные классы Enum со встроенными функциями кастинга, меток и генерации через Artisan. Это отличный способ избавиться от "магических" строк и чисел в моделях и формах. 🔧 Создание Enum через Artisan: php artisan make:enum UserRole 📁 Создастся файл: app/Enums/UserRole.php 📦 Пример класса Enum: namespace App\Enums; enum UserRole: string { case Admin = 'admin'; case Manager = 'manager'; case Customer = 'customer'; public function label(): string { return match($this) { self::Admin => 'Администратор', self::Manager => 'Менеджер', self::Customer => 'Клиент', }; } public static function options(): array { return array_map( fn($role) => ['value' => $role->value, 'label' => $role->label()], self::cases() ); } } ✅ Как использовать: 📌 Приведение типов в модели: protected $casts = [ 'role' => UserRole::class, ]; 📌 Работа с Enum: $user->role = UserRole::Admin; echo $user->role->label

Laravel Enum: Чистый, структурированный и удобный для разработчиков

Теперь Laravel поддерживает нативные классы Enum со встроенными функциями кастинга, меток и генерации через Artisan. Это отличный способ избавиться от "магических" строк и чисел в моделях и формах.

🔧 Создание Enum через Artisan:

php artisan make:enum UserRole

📁 Создастся файл: app/Enums/UserRole.php

📦 Пример класса Enum:

namespace App\Enums;

enum UserRole: string

{

case Admin = 'admin';

case Manager = 'manager';

case Customer = 'customer';

public function label(): string

{

return match($this) {

self::Admin => 'Администратор',

self::Manager => 'Менеджер',

self::Customer => 'Клиент',

};

}

public static function options(): array

{

return array_map(

fn($role) => ['value' => $role->value, 'label' => $role->label()],

self::cases()

);

}

}

✅ Как использовать:

📌 Приведение типов в модели:

protected $casts = [

'role' => UserRole::class,

];

📌 Работа с Enum:

$user->role = UserRole::Admin;

echo $user->role->label(); // "Администратор"

📌 Генерация <select> (Blade или Livewire):

<select name="role">

@foreach (App\Enums\UserRole::options() as $option)

<option value="{{ $option['value'] }}">{{ $option['label'] }}</option>

@endforeach

</select>

📌 Валидация ввода:

'role' => ['required', new Enum(UserRole::class)],

📌 Laravel Enums делают код чище, улучшают его читаемость и уменьшают количество ошибок, связанных с недопустимыми значениями. Используйте make:enum, для быстрого создания, и расширяйте функциональность по мере необходимости.

📱 @dev-notes.ru

#Laravel