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

时间:2011-04-14 20:08:33

标签: php zend-form form-submit

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

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

$delete = new Zend_Form_Element_Submit('delete');
$delete->setLabel('Delete');

其中HTML呈现如下:

<input type="submit" name="save_changes" id="user_save_changes" value="Save Changes" >
<input type="submit" name="delete" id="user_delete" value="Delete" >

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

5 个答案:

答案 0 :(得分:9)

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

if(isset($_POST['save_changes'])
// or
if(isset($_POST['delete'])

因为只会提交点击按钮的值。

通常你给两个按钮命名相同(例如动作),然后设置 您想要执行的操作的值。不幸的是,这不是很好 与IE。有关多个不同解决方案的详细信息,请查看this page 提交按钮。

答案 1 :(得分:8)

由于您使用的是Zend,我会推荐更多Zend-ish方法。

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

你的代码中的

将是:

if ($form->save_changes->isChecked()) {
    // Saving ...
else if ($form->delete->isChecked()) {
    // Removing ...

答案 2 :(得分:4)

实际上你可以通过以下方式获得:

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

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

我之所以做了两个if条件是因为你不能这样做,因为即使你没有点击任何提交按钮也加载了那个页面,另一个条件将被执行。

示例:

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
}

真实的故事。

答案 3 :(得分:0)

$data = $this->getRequest()->getPost();
if (array_key_exists('save_changes', $data)) {
..
} else if (array_key_exists('delete', $data)) {
..
}

答案 4 :(得分:-1)

 $formData = $this->getRequest()->getPost(); 

if($formData['submit']=='save_changes'){ // echo "save chanes" ; }
if($formData['submit']=='delete'){ // echo "delete";}