我有一个要根据其验证期间发生的错误进行编辑的表单,但是当我尝试删除字段时,出现异常“ AlreadySubmittedException”。
提交后如何从表单中删除字段?
$form = $this->createForm(MyForm::class);
$removeTheField=true;
if ($request->getMethod() == 'POST') {
$form->handleRequest($request);
if ($form->isValid()) {
// Send form data to an API and get api errors
// if api responds with some error
$removeTheField = false;
// endif
}
}
if(removeTheField)) {
$form->remove('my_field'); // throw AlreadySubmittedException
}
我正在考虑但我不太喜欢的一个解决方案是,使用前一个数据和更少的字段重新创建表单。
答案 0 :(得分:1)
我认为这不是正确的方法。因此,如果您知道自己还有另一个验证,则应该对该字段实施自己的验证,以便可以使用正确的值进行验证。
https://symfony.com/doc/current/validation/custom_constraint.html
如果您不需要该字段,则应删除它们或禁用该字段的验证。
答案 1 :(得分:0)
应该是这样吗?如果提交了表单,则可以检查是否存在错误,然后创建另一个要呈现的表单。
if ($request->getMethod() == 'POST') {
$form->handleRequest($request);
if ($form->isValid()) {
// check for errors
if(removeTheField){
$the_new_form = $this->createFormBuilder(null)-> ...
// $the_new_form does not have 'my_field'
return $this>render('your_twig.html.twig', array('form' => $the_new_form->createView()));
}
}
}
在“ your_twig.html.twig”中,您可以检查表单是否包含“ my_field”,以避免Twig出现问题。
答案 2 :(得分:0)
PHP
$form = $this->createForm(MyForm::class);
$removeTheField=true;
if ($request->getMethod() == 'POST') {
$form->handleRequest($request);
if ($form->isValid()) {
// Send form data to an API and get api errors
// if api responds with some error
$removeTheField = false;
// endif
}
}
return $this->render('template.html.twig', [
'form' => $form->createView(),
'removeTheField' => $removeTheField
]);
树枝
{% if removeTheField %}
{% do form.my_field.setRendered %}
{% else %}
<div class="col-md-6">
{{ form_row(form.my_field) }}
</div>
{% endif %}