事件
EasyAdmin 在执行其请求期间触发多个 Symfony 事件,因此您可以监听这些事件并运行您自己的逻辑。
事件在 EasyAdmin 3.0 之前的版本中很有用,因为后端是使用 YAML 配置文件而不是 PHP 代码定义的。从 EasyAdmin 3.0 开始,一切都用 PHP 定义。这就是为什么重载 PHP 类和方法并调用您自己的服务来定制后端行为更容易。但是,如果您想使用事件,它们仍然存在。
所有事件都使用对象而不是定义为字符串的事件名称触发(自 Symfony 4.3 以来推荐)。它们在 EasyCorp
命名空间下定义
与 Doctrine 实体相关的事件
AfterEntityBuiltEvent
AfterEntityDeletedEvent
AfterEntityPersistedEvent
AfterEntityUpdatedEvent
BeforeEntityDeletedEvent
BeforeEntityPersistedEvent
BeforeEntityUpdatedEvent
与资源管理员相关的事件
AfterCrudActionEvent
BeforeCrudActionEvent
事件订阅器示例
以下示例展示了如何使用事件订阅器在持久化 BlogPost
实体之前设置其 slug
属性
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);
}
}
本作品,包括代码示例,根据 Creative Commons BY-SA 3.0 许可协议获得许可。