提交后删除symfony表单字段

时间:2018-11-19 14:56:02

标签: php forms symfony

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

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

3 个答案:

答案 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 %}