带有两个提交按钮的 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->request->has('delete')
,因为表单可以是 POST 数据。以上是关于带有两个提交按钮的 Symfony 2 表单的主要内容,如果未能解决你的问题,请参考以下文章