如何检测Zend Framework表单上按下了哪个提交按钮?

Sha*_*ell 2 php form-submit zend-form

我有一个Zend Framework表单,有两个提交按钮

$changes = new Zend_Form_Element_Submit('save_changes');
$changes->setLabel('Save Changes');

$delete = new Zend_Form_Element_Submit('delete');
$delete->setLabel('Delete');
Run Code Online (Sandbox Code Playgroud)

这样呈现HTML如下:

<input type="submit" name="save_changes" id="user_save_changes" value="Save Changes" >
<input type="submit" name="delete" id="user_delete" value="Delete" >
Run Code Online (Sandbox Code Playgroud)

在控制器中,如何确定用户按下哪个按钮?

Daf*_*aff 9

在你的情况下,你应该只能检查

if(isset($_POST['save_changes'])
// or
if(isset($_POST['delete'])
Run Code Online (Sandbox Code Playgroud)

由于只提交了点击按钮的值.

通常,您为两个按钮指定相同的名称(例如操作),然后将值设置为您要执行的操作.不幸的是,这与IE无法很好地协作.有关多个提交按钮的不同解决方案的详细信息,请查看此页面.


Fer*_*cal 8

既然你正在使用Zend,我会推荐更多Zend-ish方法.

你可以直接通过他们的名字调用元素,Zend有一个方法用于调用表单按钮(按钮,重置,提交)isChecked().

在你的代码中它将是:

if ($form->save_changes->isChecked()) {
    // Saving ...
else if ($form->delete->isChecked()) {
    // Removing ...
Run Code Online (Sandbox Code Playgroud)


Sup*_*oob 5

实际上你可以通过以下方式得到这个:

if($this->getRequest()->getPost('save_changes'){
//Code here
}

if($this->getRequest()->getPost('delete'){
//Code here
}
Run Code Online (Sandbox Code Playgroud)

我之所以创建两个 if 条件,是因为您无法执行 if else 操作,因为即使您没有单击任何提交按钮,您也会加载该页面,另一个条件也会被执行。

例子:

if($this->getRequest()->getPost('save_changes'){
  //once you load this will become true because you didn't click this
}else{
  //once you load this page this will become true because you didn't click the save_changes submit button
}
Run Code Online (Sandbox Code Playgroud)

真实的故事。