CRUD Controllers
Extend the Admin Panel with custom CRUD interfaces using EasyAdmin.
Basic CRUD Controller
<?php
namespace Plugins\MyPlugin\Controller\Admin;
use App\Core\Controller\Admin\AbstractPanelController;
use EasyCorp\Bundle\EasyAdminBundle\Config\Crud;
use EasyCorp\Bundle\EasyAdminBundle\Config\Action;
use EasyCorp\Bundle\EasyAdminBundle\Config\Actions;
use EasyCorp\Bundle\EasyAdminBundle\Field\IdField;
use EasyCorp\Bundle\EasyAdminBundle\Field\TextField;
use EasyCorp\Bundle\EasyAdminBundle\Field\DateTimeField;
use Plugins\MyPlugin\Entity\MyEntity;
class MyEntityCrudController extends AbstractPanelController
{
public static function getEntityFqcn(): string
{
return MyEntity::class;
}
public function configureCrud(Crud $crud): Crud
{
return $crud
->setEntityLabelInSingular('My Entity')
->setEntityLabelInPlural('My Entities')
->setPageTitle('index', 'My Plugin - Entities')
->setPageTitle('detail', fn (MyEntity $entity) => sprintf('Entity #%d', $entity->getId()))
->setDefaultSort(['createdAt' => 'DESC'])
->setPaginatorPageSize(25);
}
public function configureFields(string $pageName): iterable
{
yield IdField::new('id')
->hideOnForm();
yield TextField::new('name')
->setRequired(true);
yield TextField::new('description')
->setRequired(false);
yield DateTimeField::new('createdAt')
->hideOnForm();
}
public function configureActions(Actions $actions): Actions
{
return $actions
->add(Crud::PAGE_INDEX, Action::DETAIL)
->remove(Crud::PAGE_INDEX, Action::DELETE);
}
}Advanced CRUD Features
Custom Actions
Field Types
Common Fields
Filters
Batch Actions
Custom Templates
Template file templates/admin/status_badge.html.twig:
Service Registration
Important: CRUD controllers must be:
Tagged with
controller.service_argumentsMarked as
public: true
Adding to Admin Menu
Use MenuEventSubscriber to add your CRUD to the admin menu:
Permissions
Restrict access with permissions:
Related Guides
Entities & Database - Create entities to manage
Event System - Add to admin menu
Dependencies - Service injection
EasyAdmin Documentation - Full reference
Last updated