Events
EasyAdmin triggers several Symfony events during the execution of its requests, so you can listen to those events and run your own logic.
Events were useful in EasyAdmin versions previous to 3.0, because backends were defined with YAML config files instead of PHP code. Starting from EasyAdmin 3.0 everything is defined with PHP. That's why it's easier to customize backend behavior overloading PHP classes and methods and calling to your own services. However, the events still remain in case you want to use them.
All events are triggered using objects instead of event names defined as strings
(as recommended since Symfony 4.3). They are defined under the
EasyCorp
namespace:
Events related to Doctrine entities:
AfterEntityBuiltEvent
AfterEntityDeletedEvent
AfterEntityPersistedEvent
AfterEntityUpdatedEvent
BeforeEntityDeletedEvent
BeforeEntityPersistedEvent
BeforeEntityUpdatedEvent
Events related to resource admins:
AfterCrudActionEvent
BeforeCrudActionEvent
Event Subscriber Example
The following example shows how to use an event subscriber to set the slug
property of the BlogPost
entity before persisting it:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
# src/EventSubscriber/EasyAdminSubscriber.php
namespace App\EventSubscriber;
use App\Entity\BlogPost;
use EasyCorp\Bundle\EasyAdminBundle\Event\BeforeEntityPersistedEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class EasyAdminSubscriber implements EventSubscriberInterface
{
private $slugger;
public function __construct($slugger)
{
$this->slugger = $slugger;
}
public static function getSubscribedEvents()
{
return [
BeforeEntityPersistedEvent::class => ['setBlogPostSlug'],
];
}
public function setBlogPostSlug(BeforeEntityPersistedEvent $event)
{
$entity = $event->getEntityInstance();
if (!($entity instanceof BlogPost)) {
return;
}
$slug = $this->slugger->slugify($entity->getTitle());
$entity->setSlug($slug);
}
}
JavaScript Events
EasyAdmin triggers several JavaScript events during user interactions with entity forms:
Event type | Occurs when | Event detail | Cancelable |
---|---|---|---|
'ea.form.error' |
User submits a form that has validation errors | {page: pageName, form: form} |
true |
'ea.form.submit' |
User submits a form | {page: pageName, form: form} |
true |
'ea.collection.item-added' |
Item added to collection | {newElement: element} |
false |
'ea.collection.item-removed' |
Item removed from collection | false |
Tip
Read more about the detail property and the cancelable property of JavaScript events.
Here's how you can listen for these events in JavaScript:
1 2 3 4 5 6 7 8 9
document.addEventListener('ea.form.error', (event) => {
const {page, form} = event.detail
alert(`The ${page} form contains errors. Please resolve these before submitting again.`)
});
document.addEventListener('ea.form.submit', (event) => {
const {page, form} = event.detail
console.debug(`${page} form submitted`, form)
});
For more details and examples of the ea.collection.*
events, see the
Collection Field JavaScript Events section.