编辑:为了避免混淆,这个问题是关于实体侦听器的,而不是关于事件侦听器的
我正在学习Symfony事件,并研究EntityListeners和EventSubscribers是如何工作的。
据我所知,EntityListener只连接到一个实体,而EventSubscriber方法会被所有实体调用。最终,在EventSubscriber类中,我必须执行以下操作:
public function prePersist(LifecycleEventArgs $args)
{
$object = $args->getObject();
if ($object instanceof xxxxxxx) {
$this->doSomething();
}
}
所以当我需要监听单个实体的事件时,我应该使用EntityListener,当我想要监听所有实体的事件时,我应该使用EventSubscriber。
但是...看看最流行的捆绑包,如FOSUserBundle、VichUploaderBundle、SonataMediaBundle等,它们都使用EventSubcriber接口,没有一个使用EntityListener。即使他们只需要听一个实体。
我还没有看到使用EntityListener的包。
我的问题是:为什么?
从我的角度来看,EntityListener应该更有效,因为它只针对单个实体。打电话来说,每个实体更新都有20个预更新订阅者,这似乎不是很优化?
EntityListener仅附加到一个实体,而EventSubscriber方法将为所有实体调用。
无法将EntityListeners与EventListeners/EventSubscribers进行比较。
与实现事件侦听器不同,实体侦听器仅对指定的实体调用。
实体侦听器:实体侦听器是用于实体的生命周期侦听器类。
甚至监听器:它们位于实体之上,允许您跨不同的实体类实现可重用的行为。
引用@stof关于事件监听器和事件订阅者之间的区别:
订阅者的主要优势(以及Symfony在2.1中切换到订阅者的原因)是,它将事件的知识保存在类中而不是服务定义中,从而更容易在其他上下文中重用侦听器(例如Silex,这就是Symfony代码被更改的原因)。
另一方面,通过服务定义注册侦听器为捆绑包的DI设置提供了更大的灵活性(例如,允许根据配置有条件地添加标记)
简单的模板功能 Symfony是一个开源的PHP Web框架。基于最佳Web开发实践,已经有多个网站完全采用此框架开发,Symfony的目的是加速Web应用的创建与维护。它的特点如下: 缓存管理 自定义URLs 搭建了一些基础模块 多语言与I18N支持 采用对象模型与MVC分离 Ajax支持 适用于企业应用开发。
我犯了一个错误,我已经忙了两天了,一直在忙Symfony 2和MAMP pro。 错误消息是:警告:date_default_timezone_get():依赖系统的时区设置是不安全的。您需要使用date.timezone设置或date_default_timezone_set()函数。如果您使用了这些方法中的任何一种,并且您仍然收到此警告,您很可能拼错了时区标识符。我们现在选择了时区“UTC”,
Docker Symfony (PHP7-FPM - NGINX - MySQL - ELK) Docker-symfony gives you everything you need for developing Symfony application. This complete stack run with docker and docker-compose (1.7 or higher).
angular-symfony Project Bootstrap for an Angular 2+ and Symfony 4+ webservices project. Introduction This project is a template application with a secured RestFul API communication via JWT security sc
Symfony console autocomplete Enables shell autocompletion for tools based on theSymfony Console(Symfony framework, Composer, PHPSpec, Behat, etc.) Prerequisites Make sure the global composer project i
BASH/ZSH auto-complete for Symfony Console applications This package provides automatic (tab) completion in BASH and ZSH for Symfony Console Component based applications. With zero configuration, this
问题内容: 我正在尝试在我的Symfony 2项目中实现一些Ajax功能。我想使用jquery的$ .post将一些数据发送回我的控制器。但是,当我仅POST数据时,就没有CSRF保护,因为symfony的csrf保护似乎仅适用于表单。 什么是实现此目的的简单方法? 使用表单时,我可以执行$ form-> isValid()来确定CSRF令牌是否通过。我目前正在将要发布的所有内容放入表单中,然后发
我试图在我的symfony2项目中实现一些ajax功能。使用jquery的$。张贴我想发送一些数据回我的控制器。然而,当我刚刚发布数据时,没有CSRF保护,因为symfony的CSRF保护似乎只适用于表单。 有什么非常简单的方法来实现这一点? 使用表单时,我可以只做$form-