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

Posted

技术标签:

【中文标题】带有两个提交按钮的 Symfony 2 表单【英文标题】:Symfony 2 form with two submit buttons 【发布时间】:2014-05-10 17:40:11 【问题描述】:

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

<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 生成,这很容易,因为我有一个表单对象和 一个非常有用的方法:

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

我想知道执行此操作的正确方法。

谢谢。

【问题讨论】:

【参考方案1】:

从 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

【讨论】:

【参考方案2】:

你可以使用例如

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

【讨论】:

【参考方案3】:

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

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>

【讨论】:

您的回答很好,但我没有表单生成器,因此我需要一种更简单的方法来执行此操作。非常感谢您的时间。我会投票给您,但我不能,我只有 14 个代表。点。 我明白 :) 尽可能在应用程序中使用正确的表单,从长远来看,它会为您省去麻烦!【参考方案4】:

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
    
        // ...
    

【讨论】:

更通用的方式是$request-&gt;request-&gt;has('delete'),因为表单可以是 POST 数据。

以上是关于带有两个提交按钮的 Symfony 2 表单的主要内容,如果未能解决你的问题,请参考以下文章

使用会话值设置表单数据而不提交此 symfony 表单

带有两个提交按钮的 Django 表单。 . .一个需要字段,一个不需要

带有两个提交按钮和两个“目标”属性的 HTML 表单

Zend Framework提交2个表单,1个提交[关闭]

带有两个按钮的表单以不同的值提交

Django request.POST 不包含提交表单的按钮的名称