我有两个表单,一个页面上有两个提交按钮,一个视图和一个控制器应该管理它们。如果单击第一个动作,我希望它执行一个动作,如果单击第二个动作,我希望它执行另一个动作。我试过这个,其中编辑是表单的名称,但它不起作用:
if($this->getRequest()->get('edit'))
我也尝试为提交按钮设置值,但我也无法成功。请帮助我找到一种方法来识别按下了哪个按钮。:)
Symfony 2.3 附带了解决方案。它支持表单中的按钮,并且您有 isClicked() 方法来检查是否单击了按钮。
http://symfony.com/blog/new-in-symfony-2-3-buttons-support-in-forms
给按钮不同的“名称”(不是“id”)属性
<form ...>
...
<input type="submit" name="btnA" value="ActionA">
<input type="submit" name="btnB" value="ActionB">
</form>
然后控制器应该分析 POST 数据中的变量,该变量的名称将是单击按钮的名称:
if (isset($_POST['btnA'])) {
/* do A */
} else if (isset($_POST['btnB'])) {
/* do B */
}
您可以使用隐藏字段并检查它们的值:)
在您的控制器内部创建两个表单,处理它们的输入,然后检查它们是否已提交且有效。
$formOne = $this->formFactory->create();
$formTwo = $this->formFactory->create();
$formOne->handleRequest($request);
$formTwo->handleRequest($request);
if($formOne->isSubmitted() && $formOne->isValid()) {
die('form one submitted');
}
if($formTwo->isSubmitted() && $formTwo->isValid()) {
die('form two submitted');
}
return new Response($this->templating->render([template-name]), [
'formOne' => $formOne->createView(),
'formTwo' => $formTwo->createView(),
]));
然后在您的模板中创建两个带有单独按钮的表单:
form_start(formOne)
form_rest(formOne)
<button type="submit">one</button>
form_end(formOne)
form_start(formOne)
form_rest(formOne)
<button type="submit">one</button>
form_end(formOne)