带有两个提交按钮的Symfony 2表单

tv6aics1  于 2023-01-17  发布在  其他
关注(0)|答案(5)|浏览(173)

所以,我有一个表格,每行都有一个复选框,如下所示:

<form name="" action={{ path('mypath') }}" method="post">
 <button name="print">Print</button>
 <button name="delete">Delete</button>
 <table>
  {% for client in clienti %}
   <tr>
       <td><input type="checkbox" name="action[]" value="{{ client.id }}" /></td>
   </tr>

     .
     .
     .
  {% endfor %}
 </table>
</form>

现在,在我的控制器中我想检查按下了哪个按钮。我该怎么做?
在symfony生成的其他表单中,这很容易,因为我有一个form对象和一个非常有用的方法:

if ($form->get('delete')->isClicked()) {
    // delete ...
}

我想知道做这件事的正确方法。
谢谢你。

btxsgosb

btxsgosb1#

从Symfony 2.3开始,您可以:
表格:

$form = $this->createFormBuilder($task)
->add('name', 'text')
->add('save', 'submit')
->add('save_and_add', 'submit')
->getForm();

控制器:

if ($form->isValid()) {
   // ... do something

   // the save_and_add button was clicked
   if ($form->get('save_and_add')->isClicked()) {
       // probably redirect to the add page again
   }

   // redirect to the show page for the just submitted item
}

参见此处:http://symfony.com/blog/new-in-symfony-2-3-buttons-support-in-forms

eh57zj3b

eh57zj3b2#

您可以使用例如

$request = $this->get('request');
    if ($request->request->has('delete'))
    {
        ...
    }
lnlaulya

lnlaulya3#

只需在表单生成器中创建按钮,在视图中呈现它们,并使用您已经在其他表单中使用过的相同方法:

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder->add('delete', 'button')
        ->add('print', 'button')
}

你认为:

<form name="" action="{{ path('mypath') }}" method="post">
    {{ form_widget(form.print) }}
    {{ form_widget(form.delete) }}

    ...
</form>
q8l4jmvw

q8l4jmvw4#

Symfony3的更新:

use Symfony\Component\HttpFoundation\Request;

public function myAction(Request $request)
{
    if ($request->query->has('delete')) // For GET form
    {
        // ...
    }
    if ($request->request->get('delete')) // For POST form
    {
        // ...
    }
}
yizd12fk

yizd12fk5#

对于2023年,如果其他人在这方面有困难,我发现的变通办法如下:
表格:

$form = $this->createFormBuilder()
 ->add('name', 'text')
 ->add('save', 'submit')
 ->add('save_and_add', 'submit')
 ->getForm();

控制器:

$buttonSave = $form->all()['save']
if ($buttonSave instanceof SubmitButton && $buttonSave->isClicked()) {
 //your logic here
}

方式与$form->all()['save_and_add']类似
$form->get('save_and_add')返回FormInterface对象,而不是SubmitButton,因此,您无权访问isClicked()方法

相关问题