跳到内容

事件

编辑此页

EasyAdmin 在执行其请求期间触发多个 Symfony 事件,因此您可以监听这些事件并运行您自己的逻辑。

事件在 EasyAdmin 3.0 之前的版本中很有用,因为后端是使用 YAML 配置文件而不是 PHP 代码定义的。从 EasyAdmin 3.0 开始,一切都用 PHP 定义。这就是为什么重载 PHP 类和方法并调用您自己的服务来定制后端行为更容易。但是,如果您想使用事件,它们仍然存在。

所有事件都使用对象而不是定义为字符串的事件名称触发(自 Symfony 4.3 以来推荐)。它们在 EasyCorp\Bundle\EasyAdminBundle\Event\ 命名空间下定义

  • 与 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 许可协议获得许可。
目录
    版本