Я использую Symfony 3.4 и доктрину, и у меня проблема с данными, измененными слушателем событий.
Если форма отправлена и DoTrine 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 и правильно сохранено в базе данных.
Но форма отображается с «0» в поле числа, вероятно, потому что значения уже полученыс помощью команды createForm?
Как мне добиться, чтобы новое значение, которое мой прослушиватель событий записал в сущность, правильно отображалось в форме?
Спасибо и С уважением, Саша