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_arguments

  • Marked as public: true

Adding to Admin Menu

Use MenuEventSubscriber to add your CRUD to the admin menu:

Permissions

Restrict access with permissions:

Last updated