Installation:
composer require eduandebruijne/admin-bundle
Add the bundle to config/bundles.php:
return [
// ...
EDB\AdminBundle\EDBAdminBundle::class => ['all' => true],
];
Environment Configuration:
Add to .env:
EDB_ADMIN_PATH=admin
EDB_ADMIN_TITLE=My Admin Panel
First Use Case:
AbstractUser and AbstractMedia in src/Entity/ (as shown in README).php bin/console doctrine:migrations:diff
php bin/console doctrine:migrations:migrate
/admin/login (default credentials: admin/admin).config/packages/edb_admin.yaml (documented in the README snippet).EDB\AdminBundle\Resources/config/routing.yaml for available routes.templates/edb_admin/ (see Symfony templating).EDB\AdminBundle\Entity\AbstractUser and AbstractMedia for required fields.// src/Entity/Post.php
use EDB\AdminBundle\Entity\AbstractModel;
#[Entity]
class Post extends AbstractModel
{
#[Column(type: 'string', length: 255)]
private string $title;
#[Column(type: 'text')]
private string $content;
}
# config/packages/edb_admin.yaml
edb_admin:
models:
App\Entity\Post: ~
/admin/models/post to manage Post records.AbstractModel to auto-generate admin interfaces for entities.# config/packages/edb_admin.yaml
edb_admin:
models:
App\Entity\Post:
fields:
title: { label: "Post Title" }
content: { type: "textarea", rows: 10 }
edb_admin:
models:
App\Entity\Post:
list:
columns: [id, title, createdAt]
filters: [title]
AbstractMedia for file uploads (images, documents).edb_admin.yaml:
edb_admin:
media:
allowed_mime_types: ['image/jpeg', 'image/png', 'application/pdf']
Media entity (e.g., $media->getPath()).AbstractUser for custom user fields (e.g., firstName, lastName).security.yaml:
firewalls:
main:
form_login:
login_path: edb_admin_login # Custom route
%env(EDB_ADMIN_PATH)% (e.g., /admin/models/post).ROLE_ADMIN for all admin routes (configurable in security.yaml).# config/packages/vich_uploader.yaml
vich_uploader:
db_driver: orm
storage: file_system
Media entity to your models via @ManyToOne relationships.edb_admin.model.create):
// src/EventListener/AdminListener.php
use EDB\AdminBundle\Event\AdminEvents;
public function __construct()
{
$this->dispatcher->addListener(
AdminEvents::MODEL_CREATE,
[$this, 'onModelCreate']
);
}
translations/messages.en.yaml:
edb_admin:
model:
post:
label: "Blog Post"
plural_label: "Blog Posts"
// src/Controller/Api/AdminController.php
use EDB\AdminBundle\Repository\ModelRepository;
#[Route('/api/admin/posts')]
public function listPosts(ModelRepository $repository): JsonResponse
{
$posts = $repository->findAll();
return $this->json($posts);
}
Entity Naming Conflicts:
User or Media to prevent collisions with the bundle’s abstract classes.AdminUser or AppMedia instead.Missing Migrations:
doctrine:migrations:diff after adding new entities extending AbstractUser/AbstractMedia.CSRF Token Errors:
csrf_token is included in templates or forms.{{ csrf_token('edb_admin_form') }} to custom forms.Permission Denied:
ROLE_ADMIN is assigned to users (e.g., via User entity’s roles field).php bin/console edb:admin:user:create to add test admins.Template Overrides:
templates/edb_admin/ requires matching the exact directory structure (e.g., Block/admin_layout.html.twig).{{ parent() }} to inherit parent template blocks.Enable Debug Mode:
APP_DEBUG=1
var/log/dev.log for errors.Dump Admin Config:
// src/Command/DumpAdminConfig.php
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
public function execute(InputInterface $input, OutputInterface $output): int
{
$config = $this->container->getParameter('edb_admin');
$output->writeln(\print_r($config, true));
return Command::SUCCESS;
}
Database Issues:
User and Media tables exist and have correct columns (e.g., username, password, roles for User).Dynamic Admin Path:
%env(EDB_ADMIN_PATH)%) must be defined in .env and referenced in security.yaml.EDB_ADMIN_PATH=app_admin) to avoid conflicts.Google Authenticator:
GoogleAuthenticator requires the google/authenticator package:
composer require google/authenticator
security.yaml if unused:
custom_authenticators: []
Model Field Types:
json) may not render in the admin panel.type: "text" and handle serialization manually.Custom Admin Controllers:
EDB\AdminBundle\Controller\ModelController.Add Custom Actions:
Action system by creating a custom service tagged as edb_admin.action:
# config/services.yaml
services:
App\Admin\Action\ExportAction:
tags: ['edb_admin.action']
Plugin System:
edb_admin.yaml.Event Dispatching:
How can I help you explore Laravel packages today?