我有一个postUpdate侦听器,我想知道更新之前的值以及更新后数据库条目的值。有没有办法在Symfony 2.1中做到这一点?我查看了getUnitOfWork()中存储的内容,但是因为更新已经发生,所以它是空的。找出在Symfony 2.1中通过postUpdate侦听器更改的内容
6
A
回答
7
找到解决方案here。我需要的实际上是preUpdate()的一部分。我需要在LifecycleEventArgs上调用getEntityChangeSet()。
我的代码:
public function preUpdate(Event\LifecycleEventArgs $eventArgs)
{
$changeArray = $eventArgs->getEntityChangeSet();
//do stuff with the change array
}
-1
可以主义文档中找到example。
class NeverAliceOnlyBobListener
{
public function preUpdate(PreUpdateEventArgs $eventArgs)
{
if ($eventArgs->getEntity() instanceof User) {
if ($eventArgs->hasChangedField('name') && $eventArgs->getNewValue('name') == 'Alice') {
$eventArgs->setNewValue('name', 'Bob');
}
}
}
}
+0
OP特别要求“更新前的值和更新后数据库条目的值是什么”,您的响应需要针对每列需要硬编码的方法调用。 – ahonnecke
0
你Entitiy:
/**
* Order
*
* @ORM\Table(name="order")
* @ORM\Entity()
* @ORM\EntityListeners(
* {"\EventListeners\OrderListener"}
*)
*/
class Order
{
...
你的听众:
class OrderListener
{
protected $needsFlush = false;
protected $fields = false;
public function preUpdate($entity, LifecycleEventArgs $eventArgs)
{
if (!$this->isCorrectObject($entity)) {
return null;
}
return $this->setFields($entity, $eventArgs);
}
public function postUpdate($entity, LifecycleEventArgs $eventArgs)
{
if (!$this->isCorrectObject($entity)) {
return null;
}
foreach ($this->fields as $field => $detail) {
echo $field. ' was ' . $detail[0]
. ' and is now ' . $detail[1];
//this is where you would save something
}
$eventArgs->getEntityManager()->flush();
return true;
}
public function setFields($entity, LifecycleEventArgs $eventArgs)
{
$this->fields = array_diff_key(
$eventArgs->getEntityChangeSet(),
[ 'modified'=>0 ]
);
return true;
}
public function isCorrectObject($entity)
{
return $entity instanceof Order;
}
}
相关问题
- 1. Jspresso:在收集内容更改时未调用侦听器
- 2. PSI更改侦听器
- 3. 如何让侦听器侦听TreeMap中的更改?
- 4. Ember.js - 更改计算属性在运行时侦听的内容
- 5. 侦听DNS更改
- 6. ANTLR4在解析过程中更改侦听器
- 7. 图库内容更改的监听器
- 8. Dojo GridX行/单元更改侦听器?
- 9. 如何更改websphere侦听器端口
- 10. Spring属性更改侦听器
- 11. 更改地区用symfony 2.1
- 12. 在WebView中监听HTML内容更改
- 13. jQuery可拖动 - 更改侦听器
- 14. Lua Corona - 如何在滑动过程中侦听widget.newScrollView侦听器
- 15. Spring JMS侦听器容器侦听器安装程序超时
- 16. 通知ObservableBuffer监听器对内容的成员更改
- 17. Symfony Forms中的动态验证组 - 通过侦听器或默认选项?
- 18. 使用Polymer中的原型侦听器属性来侦听儿童财产更改通知器不起作用
- 19. 事件侦听器通过JavaScript的一个div改变属性
- 20. Codename在包含更多子容器的容器中侦听的一个事件
- 21. Symfony2的postUpdate监听器不工作
- 22. 通过刷卡更改UITableView的内容?
- 23. 将一个事件侦听器更改为另一个事件侦听器?
- 24. 在Websphere MQ中更改侦听器端口的命令
- 25. JCheckbox更改侦听器获取鼠标事件通知
- 26. 侦听所有内容的套接字
- 27. 在Symfony 2的侦听器中访问数据库
- 28. JavaFX中的ToggleButtons与通用侦听器
- 29. 通过Wordpress更改FrontPage内容
- 30. Eclipse RCP SourceProvider正在侦听更改
您的意思是'更新前(事件\ PreUpdateEventArgs $ EventArgs的)'? 'LifeEventArgsSet'中不存在'getEntityChangeSet()'方法。 – Lughino
链接已损坏,请尽可能更新。 – mboullouz
链接权限被拒绝 –