tourze/easy-admin-enum-field-bundle

A Symfony bundle that provides enhanced enum field support for EasyAdmin with automatic badge rendering and advanced display options

Installs: 196

Dependents: 22

Suggesters: 0

Security: 0

Stars: 0

Watchers: 0

Forks: 0

Open Issues: 0

Type:symfony-bundle

pkg:composer/tourze/easy-admin-enum-field-bundle

1.0.0 2025-10-31 15:41 UTC

This package is auto-updated.

Last update: 2025-11-01 19:15:29 UTC


README

English | 中文

PHP Version Latest Version License Build Status Code Coverage

A Symfony bundle that provides enhanced enum field support for EasyAdmin, with automatic badge rendering and advanced display options.

Features

  • Enhanced enum field rendering with automatic badge support
  • Seamless integration with PHP 8.1+ enums
  • Automatic label generation from enum cases
  • Customizable badge colors and styles
  • Support for translatable enum labels
  • Multiple choice selection capabilities
  • Autocomplete widget support
  • Native and expanded rendering modes

Installation

composer require tourze/easy-admin-enum-field-bundle

Dependencies

  • PHP 8.1 or higher
  • Symfony 6.4 or higher
  • EasyAdmin Bundle 4.0 or higher
  • tourze/enum-extra package

Quick Start

Basic Usage

<?php

use Tourze\EasyAdminEnumFieldBundle\Field\EnumField;
use App\Entity\StatusEnum;

// In your EasyAdmin CrudController
public function configureFields(string $pageName): iterable
{
    yield EnumField::new('status')
        ->setEnumCases(StatusEnum::cases())
        ->renderAsBadges();
}

Advanced Configuration

<?php

use Tourze\EasyAdminEnumFieldBundle\Field\EnumField;

// Custom badge mapping
yield EnumField::new('priority')
    ->setEnumCases(PriorityEnum::cases())
    ->renderAsBadges([
        'high' => 'danger',
        'medium' => 'warning',
        'low' => 'success'
    ]);

// Multiple choice support
yield EnumField::new('tags')
    ->setEnumCases(TagEnum::cases())
    ->allowMultipleChoices()
    ->autocomplete();

Enum Interface Support

Your enums can implement the Labelable and BadgeInterface interfaces for enhanced functionality:

<?php

use Tourze\EnumExtra\Labelable;
use Tourze\EnumExtra\BadgeInterface;

enum StatusEnum: string implements Labelable, BadgeInterface
{
    case ACTIVE = 'active';
    case INACTIVE = 'inactive';
    case PENDING = 'pending';

    public function getLabel(): string
    {
        return match ($this) {
            self::ACTIVE => 'Active',
            self::INACTIVE => 'Inactive',
            self::PENDING => 'Pending',
        };
    }

    public function getBadge(): string
    {
        return match ($this) {
            self::ACTIVE => self::SUCCESS,
            self::INACTIVE => self::DANGER,
            self::PENDING => self::WARNING,
        };
    }
}

Configuration Options

Badge Types

Available badge types: success, warning, danger, info, primary, secondary, light, dark

Widget Types

  • native: Use native HTML select widget
  • autocomplete: Use autocomplete widget with search functionality

Display Options

  • renderExpanded(): Render as radio buttons or checkboxes
  • escapeHtml(): Control HTML escaping in field values
  • allowMultipleChoices(): Enable multiple selection

Advanced Usage

Custom Field Configurator

You can create custom field configurators to apply consistent enum field settings:

<?php

use Tourze\EasyAdminEnumFieldBundle\Field\EnumField;

class StatusFieldConfigurator
{
    public static function create(string $propertyName): EnumField
    {
        return EnumField::new($propertyName)
            ->setEnumCases(StatusEnum::cases())
            ->renderAsBadges([
                'active' => 'success',
                'inactive' => 'danger',
                'pending' => 'warning'
            ])
            ->escapeHtml(false);
    }
}

Dynamic Badge Configuration

Use callable for dynamic badge assignment:

yield EnumField::new('status')
    ->setEnumCases(StatusEnum::cases())
    ->renderAsBadges(function(FieldDto $field) {
        $value = $field->getValue();
        return match ($value) {
            StatusEnum::CRITICAL => 'danger',
            StatusEnum::HIGH => 'warning',
            default => 'info'
        };
    });

Contributing

Please see CONTRIBUTING.md for details.

License

The MIT License (MIT). Please see License File for more information.