事件
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);
}
}
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 许可协议获得许可。