Forms 如何在表单请求在DB中提交之前修改其值?

Forms 如何在表单请求在DB中提交之前修改其值?,forms,symfony,events,Forms,Symfony,Events,我使用eventlisterner检查用户/作者返回的一些值,然后再将它们提交给DB 我的表单允许角色用户更改实体文章的某些属性(如statut)。文章具有statut(Published,Delete)和tobecheked('author want Delete this Article','null')等属性,这些属性允许角色_管理员轻松查看某些文章 无论如何。我希望当作者提交statutstatut=>'DELETE'时,statut的值被选中变成=>'Author想要删除这篇文章' 这

我使用eventlisterner检查用户/作者返回的一些值,然后再将它们提交给DB

我的表单允许角色用户更改实体文章的某些属性(如statut)。文章具有statut(Published,Delete)和tobecheked('author want Delete this Article','null')等属性,这些属性允许角色_管理员轻松查看某些文章

无论如何。我希望当作者提交statutstatut=>'DELETE'时,statut的值被选中变成=>'Author想要删除这篇文章'

这是我试过的,但不起作用

class Article extends AbstractType
{
  public function buildForm(FormBuilderInterface $builder, array $options)
  {
    $builder->add('Statut', ...);
            ->add('toBeChecked',  ...);

    $dynamicSubmissionFunc = function (FormEvent $event)
    {
       $data = $event->getData();
       if($data['statut'] == 'DELETE')
       {
           // HOW CAN I MODIFY HERE THE VALUE OF ARTICLE ATTRIBUTE
           $data['toBeChecked'] = 'author wants to delete this article';
           // nothing is changed in the attribute toBeChecked.
       }
    }
    $builder->addEventListener(FormEvents::PRE_SUBMIT, $dynamicSubmissionFunc);
  }
}

嗯。我明白了。您需要将数据设置回事件:

$event->setData($data);

很抱歉我犯了一个错误。现在我编辑了我的答案。你需要检查它。很好,至少对表单中的数据有效。但是,如果我还想修改表单中未提交的属性,该怎么办?这有可能改变它吗?(我的意思是,假设属性“tobeChecked”未添加到字段中,那么我如何更改其在数据库中关于用户提交值的值。您应该使用Doctrine事件侦听器或生命周期回调。它将独立于您的表单,并且将在每次更新实体时执行。)(来自表单,直接来自控制器,即使它被另一个bundle修改)但我需要根据用户为“statut”属性提交的值修改“tobeChecked”。实际上,只有当user=ROLE\u AUTHOR,而不是user=ROLE\u ADMIN时,才需要修改。您认为可以使用条令事件侦听器和生命周期回调吗?可以使用事件侦听器,但使用生命周期回调,您只能访问您自己r实体。