atournayre/easyadmin-fields-bundle
Installation
composer require atournayre/easyadmin-fields-bundle
Ensure your Laravel project uses EasyAdminBundle 4.2+ (check composer.json under require).
Enable the Bundle
Add to config/bundles.php:
Tournayre\EasyAdminFieldsBundle\TournayreEasyAdminFieldsBundle::class => ['all' => true],
First Use Case: Enum Field
In your EasyAdmin CRUD controller, replace a standard field with the EnumField:
use Tournayre\EasyAdminFieldsBundle\Field\EnumField;
$this->fields = [
EnumField::new('status')->setEnumClass(MyEnum::class),
// ... other fields
];
src/Field/EnumField.php for implementation details (e.g., how setEnumClass() works).Replacing Default Fields
Swap EasyAdmin’s default fields (e.g., TextField, ChoiceField) with EnumField for enums:
$this->fields = [
EnumField::new('userRole')->setEnumClass(UserRole::class),
// Fallback to default if enum is missing
TextField::new('userRole')->hideOnIndex(),
];
Conditional Field Rendering
Use setEnumClass() dynamically based on runtime logic:
$enumClass = $this->getParameter('app.current_enum');
$this->fields = [
EnumField::new('priority')->setEnumClass($enumClass),
];
Integration with Forms Ensure your entity’s enum property is type-hinted (PHP 8.1+):
class MyEntity {
public UserRole $status; // Required for EnumField to work
}
EnumField::new('status')
->setEnumClass(MyEnum::class)
->setLabel('User Status')
->onlyOnForms() // Show only in edit/create
setTranslationDomain():
EnumField::new('status')
->setEnumClass(MyEnum::class)
->setTranslationDomain('messages')
PHP Version Mismatch
Class 'Tournayre\EasyAdminFieldsBundle\Field\EnumField' not foundatournayre/helpers is installed (auto-included via require).Missing Enum Class
setEnumClass() is omitted.if (!class_exists($enumClass)) {
throw new \RuntimeException("Enum class {$enumClass} not found.");
}
Caching Issues
php bin/console cache:clear
config/bundles.php.EnumField::buildView():
public function buildView(FieldView $view, FormView $formView, array $options)
{
\Log::debug('EnumField rendered for: ' . $view->getProperty());
// ... rest of the method
}
Custom Enum Rendering
Extend EnumField to modify how enums are displayed:
class CustomEnumField extends EnumField {
public function configureOptions(OptionsResolver $resolver) {
$resolver->setDefaults([
'template' => '@YourBundle/fields/custom_enum.html.twig',
]);
}
}
Add New Fields
Fork the bundle and add new fields (e.g., JsonField, DateRangeField) by extending AbstractField.
Override Templates
Copy vendor/tournayre/easyadmin-fields-bundle/Resources/views/fields/enum.html.twig to your theme and customize:
{# app/Resources/EasyAdmin/Bundles/TournayreEasyAdminFieldsBundle/views/fields/enum.html.twig #}
<select {{ block('widget_attributes') }}>
{% for key, label in enumValues %}
<option value="{{ key }}">{{ label|trans({}, translationDomain) }}</option>
{% endfor %}
</select>
How can I help you explore Laravel packages today?