我在页面上有两个表单,每个表单都有一个提交按钮。我想让一个视图和一个控制器管理它们。如果点击第一个按钮,它应该执行一个操作,如果点击第二个按钮,则执行另一个操作。我尝试了以下代码,其中“edit”是表单的名称,但它无法正常工作:
if($this->getRequest()->get('edit'))
我还尝试将值设置为提交按钮,但是它也无法工作。请帮助我找到一种方法来识别哪个按钮被按下了。 :)
Symfony 2.3提供了解决方案。它支持在表单中添加按钮,并且您可以使用isClicked()方法来检查是否点击了一个按钮。
http://symfony.com/blog/new-in-symfony-2-3-buttons-support-in-forms
$form->get('delete')->isClicked()
是Symfony 2.3的一个新功能。但要注意,如果按钮不存在,并且您使用此方法,将会出现错误。这似乎是显而易见的,但在许多情况下,您可能会根据条件包含一个按钮,例如仅在编辑现有记录时显示删除按钮,而不是创建新记录。因此,您应该首先检查按钮是否存在,例如:if($form->has('delete') && $form->get('delete')->isClicked()) {
- Chadwick Meyer<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 */
}
$request->get('your_value', null);
。第二个参数 - 是在 $_REQUEST
数组中不存在 your_value
的情况下返回的值。 - Vitalii Zurian$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)
form
标签中可以有多个submit
按钮。@Faery:尝试在$_POST
上使用print_r
或var_dump
检查提交了什么内容(点击的submit
按钮的名称也会被发送)。 - Sven van Zoelen