两种形式 - 两个提交按钮。控制器如何识别单击了哪个按钮?

问题描述 投票:4回答:4

我有两个表单,一个页面有两个提交按钮,一个视图和一个控制器应该管理它们。如果单击第一个动作,我希望它执行一个动作,如果是第二个动作,我希望它执行另一个动作。我试过这个,其中edit是表单的名称,但它不起作用:

if($this->getRequest()->get('edit'))

我也尝试为提交按钮设置值,但我也无法实现。请帮我找到如何识别按下哪个按钮的方法。 :)

php symfony doctrine
4个回答
5
投票

给按钮不同的“名称”(不是“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 */ 
}

13
投票

Symfony 2.3附带解决方案。它支持表单中的按钮,并且您有isClicked()方法来检查是否单击了按钮。

http://symfony.com/blog/new-in-symfony-2-3-buttons-support-in-forms


2
投票

您可以使用隐藏字段并检查其值:)


0
投票

在控制器内部创建两个表单,处理他们的输入,然后检查它们是否已提交且有效。

$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)
© www.soinside.com 2019 - 2024. All rights reserved.