Php 提交后删除symfony表单字段

Php 提交后删除symfony表单字段,php,forms,symfony,Php,Forms,Symfony,我有一个表单,我想根据其验证期间发生的错误对其进行编辑,但当我尝试删除一个字段时,会出现异常“AlreadySubmittedException” 提交后如何从我的表单中删除字段 $form = $this->createForm(MyForm::class); $removeTheField=true; if ($request->getMethod() == 'POST') { $form->handleRequest($request); if ($f

我有一个表单,我想根据其验证期间发生的错误对其进行编辑,但当我尝试删除一个字段时,会出现异常“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
}

我正在考虑但我不太喜欢的一个解决方案是使用上一个表单的数据和更少的字段重新创建表单。

我认为这不是正确的方法。因此,如果您知道您有另一个验证,那么您应该为该字段实现您自己的验证,您可以使用正确的值并验证它


如果不需要该字段,则应删除它们或禁用该字段的验证

应该是这样的吗?如果表单已提交,则可以检查错误,然后创建另一个表单进行渲染

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_字段”,以避免twig出现问题。

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%}
{{form_行(form.my_字段)}
{%endif%}

为什么要在提交表单后删除字段?我有一个表单,可以要求用户提供额外的代码来覆盖可能发生的错误(此代码授予额外的权限)但默认情况下不应显示此输入。相反的行为也有问题:在出现预期错误后添加字段也会导致异常。将完整表单发送到视图,但第一次和第二次呈现除管理代码以外的所有字段如何(您可以使用控制器轻松地处理它,例如,在验证错误时向视图发送一个标志)?(或者如果您第一次想要全部,而不是第二次想要此字段,则使用另一种方式)表单rest将显示该字段,对吗?我需要该字段,但只有在发生错误时才需要:我至少提交了一次表单,输入不应该出现在之前。它缺少树枝部分:{%if I_need_my_field%}{{form_row(form.my_field)}{%else%}{%do form my_field.setRendered%}{%endif%}
 {% if removeTheField %}
     {% do form.my_field.setRendered %}
 {% else %}
     <div class="col-md-6">
          {{ form_row(form.my_field) }}
      </div>
 {% endif %}