我有一个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" >
在控制器中,如何确定用户按下哪个按钮?
答案 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";}