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

Fae*_*ery 4 php doctrine symfony

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

if($this->getRequest()->get('edit'))
Run Code Online (Sandbox Code Playgroud)

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

Fox*_*ion 13

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()){` (5认同)

Cla*_*dix 5

给按钮不同的"名称"(不是"id")属性

<form ...>
...
<input type="submit" name="btnA" value="ActionA">
<input type="submit" name="btnB" value="ActionB">
</form>
Run Code Online (Sandbox Code Playgroud)

然后,控制器应分析POST数据以查找名称将是所单击按钮名称的变量:

if (isset($_POST['btnA'])) { 
    /* do A */ 
} else if (isset($_POST['btnB'])) { 
   /* do B */ 
}
Run Code Online (Sandbox Code Playgroud)

  • 这个网站是为了帮助,不是吗?:-)那么,在这种情况下,我发布的解决方案仍然有效(假设你发布到同一个脚本),因为isset()函数将检查点击了哪个按钮来提交表单. (2认同)
  • 伙计们,有谁知道Symfony? (2认同)
  • @Claudix要从请求中获取提交的数据,只需执行:`$ request-> get('your_value',null);`.第二个参数 - 如果`$ _REQUEST`数组中的`your_value`不存在则返回值 (2认同)