2011-04-14 33 views
2

我有一個Zend框架形成具有兩個提交按鈕如何檢測在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" > 

在控制器中,我該如何判斷用戶按下哪個按鈕?

回答

9

你的情況,你應該能夠檢查

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

因爲只有點擊按鈕的值將被提交。

通常您給兩個按鈕使用相同的名稱(例如動作),然後將 值設置爲您要執行的操作。不幸的是,IE瀏覽器不能很好地運行 。有關多個 提交按鈕的不同解決方案的更多信息,請檢查this page

+0

在控制器:'如果($這 - > PARAMS() - > fromPost( 'save_changes',假))' 或'如果($這 - > PARAMS() - > fromPost('刪除」,FALSE))' – davmor 2015-08-11 12:56:30

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

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

既然你使用的是Zend,我會推薦更多的Zend-ish方法。

你可以直接用他們的名字調用元素,而Zend有一個叫做isChecked()的表單按鈕(按鈕,重置,提交)的方法。

在你的代碼

這將是:

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

其實你可以得到這樣的:

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

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

我做了兩個條件,如果因爲你不能這樣做的原因,如果是因爲別的一個你即使您沒有點擊任何提交按鈕,也會加載該頁面,其他條件將被執行。

例子:

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 
} 

真實的故事。

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