【发布时间】:2016-12-28 19:06:27
【问题描述】:
我有带有字段的 Products 实体
- 姓名,
- purch_price_net
- purch_price_gross
- purch_vat_value
- purch_vat_rate_id [来自其他表]
我需要功能,当用户在 SonataAdminBundle purch_price_net 字段中编辑时,purch_price_gross [和其他字段] 会自动更改它们的值。
所以我创建了PreUpdateProducts 监听器:
<?php
namespace AppBundle\EventListener;
use Doctrine\ORM\Events;
use AppBundle\Entity\Products;
// echo Events::preUpdate;
class PreUpdateProducts {
public function preUpdate(PreUpdateEventArgs $eventArgs) {
if ($eventArgs->getEntity () instanceof Products) {
if ($eventArgs->hasChangedField ( 'purchPriceNet' )) {
$newPurchPriceNet = $eventArgs->getNewValue ( 'purchPriceNet' );
$eventArgs->setNewValue ( 'purchPriceGross', $newPurchPriceNet * 1.23 );
$eventArgs->setNewValue ( 'name', 'changedName' ); // for tests
}
}
}
}
并在 services.yml 中添加:
services:
[...]
my.listener:
class: AppBundle\EventListener\PreUpdateProducts
tags:
- { name: doctrine.event_listener, event: PreUpdateProducts }
不幸的是,它不起作用,按下“更新”后没有任何变化 [除了 purchPriceNet]。 我怎样才能让它工作?
【问题讨论】:
-
如何触发事件
PraUpdateProducts?因为在 Symfony/Doctrine 中没有这样的事件。生命周期事件应该在实体的映射中定义。 docs.doctrine-project.org/projects/doctrine-orm/en/latest/… -
(可能)跑题了,但在实体名称中使用复数是自找麻烦。
标签: symfony doctrine-orm sonata-admin sonata