doctrine2 – 如何在doctrine 2.1中发布持久化/更新操作,包括重
使用doctrine 2.1(以及zend框架1.11,而不是它对这个问题很重要),如何发布持久化和发布更新操作,包括重新保存到数据库?
例如,根据刚生成的主键’id创建唯一令牌,或为上传的图像生成缩略图(实际上不需要重新保存到数据库,但仍然)? 编辑 – 让我们解释一下,好吗? 以上实际上是关于两种情况的问题.两种情况都与以下状态有关:
现在 – 这是场景: >当用户上传图像时,我想在将图像保存到数据库后立即生成该图像的缩略图.这应该发生在每个新的或更新的图像上.
但我希望它在对象的持久化上自动发生(好吧,冲洗持久化对象),就像prePersist或preUpdate方法一样. 了解图像的链接应该是可公开访问的,因此我不能只允许经过身份验证的用户通过某种权限规则查看它们. 解决方法你可能已经知道 Doctrine events了.你能做什么:使用postPersist事件处理程序.那个在DB插入之后发生,因此自动生成的id可用. EventManager类可以帮助您: class MyEventListener { public function postPersist(LifecycleEventArgs $eventArgs) { // in a listener you have the entity instance and the // EntityManager available via the event arguments $entity = $eventArgs->getEntity(); $em = $eventArgs->getEntityManager(); if ($entity instanceof User) { // do some stuff } } } $eventManager = $em->getEventManager(): $eventManager->addEventListener(Events::postPersist,new MyEventListener()); 一定要检查e. G.如果用户已有Image,否则如果在事件监听器中调用flush,则可能会陷入无限循环. 当然,您也可以使用内联postPersist eventHandler让您的User类知道该图像创建操作,并在映射中添加@HasLifecycleCallbacks,然后始终在请求e的末尾刷新. G.在关机功能,但在我看来这种东西属于一个单独的监听器.因人而异. 如果在刷新之前需要实体id,则在创建对象之后,另一种方法是为应用程序中的实体生成id,例如: G.使用uuids. 现在你可以这样做: class Entity { public function __construct() { $this->id = uuid_create(); } } 现在你刚刚设置了一个id: $e = new Entity(); 而且您只需要在请求结束时调用EntityManager :: flush (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |