【发布时间】:2018-11-10 19:12:23
【问题描述】:
我使用 Symfony 3.4 和学说,但在事件侦听器更改的数据方面存在问题。
如果一个表单被提交并且一个 Doctrine PreUpdate EventLister 改变了一个实体值,这在表单中是不可见的。
以一个名为 Activity 的实体为例,该实体具有 $number 属性:
/**
* @ORM\Entity
* @ORM\Table(name="activity")
* @ORM\EntityListeners({"ActivityListener"})
*/
class Activity
{
/**
* @ORM\Column(type="integer")
*/
private $number ;
...
Getters, Setters an other stuff...
}
还有一个事件监听器:
class ActivityListener
{
// Events
public function get()
{
return ( ['preUpdate']);
}
public function preUpdate(Activity $activity, LifecycleEventArgs $args)
{
$activity->setNumber(1) ;
}
}
控制器中的表单处理,假设我提交了表单,例如0 作为我的数字字段的值:
class ActivityController
{
...
// Create form and handle request
$form = $this->createForm (ActivityForm::class, $activity) ;
$this->form->handleRequest ( $this->request ) ;
if ( $this->form->isSubmitted() )
{
// $activity->number == 0 as entred in HTML Form
$this->em->persist($activity) ;
$this->em->flush();
// $activity->number == 1 as set in PreUpdate Event
}
$this->view = $this->form->createView () ;
...
}
所以“数字”字段被 EventListener 正确设置为 1 并正确保存到数据库中。
但是表单在数字字段中呈现为“0”,可能是因为值已经使用 createForm 命令获取?
我怎样才能使我的事件侦听器写入实体的新值在表单中正确显示?
谢谢你和亲切的问候, 萨沙
【问题讨论】:
-
所以当它显示在表单中时,您希望值已经为 1?
-
是的,没错。提交表单时字段包含值 0。在实体中,preUpdate 事件中的值设置为 1,并且该值保存到数据库中。所以表单应该包含值 1,那么。
标签: php symfony event-listener