跳到内容

事件

编辑此页

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);
    }
}

JavaScript 事件

EasyAdmin 在用户与实体表单交互期间会触发多个 JavaScript 事件

事件类型 发生时间 事件详情 可取消
'ea.form.error' 用户提交了包含验证错误的表单 {page: pageName, form: form} true
'ea.form.submit' 用户提交了表单 {page: pageName, form: form} true
'ea.collection.item-added' 向集合添加了项目 {newElement: element} false
'ea.collection.item-removed' 从集合中删除了项目   false

提示

阅读更多关于 JavaScript 事件的 detail 属性cancelable 属性 的信息。

以下是如何在 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)
});

有关 ea.collection.* 事件的更多详细信息和示例,请参阅 集合字段 JavaScript 事件 部分。

本作品,包括代码示例,根据 Creative Commons BY-SA 3.0 许可协议获得许可。
目录
    版本