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