2011-06-02 100 views
6

我建了一個表單類擴展zend_form.I有兩個按鈕提交:Zend的兩個提交按鈕同名

$like=new Zend_Form_Element_Image('vote'); 
$like->setImage($config->path->images."up.png") 
->setValue(2); 

$dislike=new Zend_Form_Element_Image('vote'); 
$dislike->setImage($config->path->images."down.png") 
->setValue(1); 

我想有兩個提交按鈕具有相同的名稱和不同的值,這樣我以後可以通過switch語句控制器訪問提交一個值:

$submit = $this->_request->getPost('vote'); 

switch($submit) { 
case 'one': 
// button one was pressed 
break; 
case 'two': 
} 

} 

但如果我不設置那些具有相同的名稱,最後一個是壓倒一切的第一所以只有一個按鈕被輸出。

使用文件元素theres一個方法setMultifile()來執行這個技巧。

我應該在這裏做什麼?

感謝

盧卡

回答

0

爲什麼不做這樣的:

if($this->_request->isPost() && $yourForm->isValid($this->_request->getPost())) { 
    if($yourForm->one->isChecked()) 
     // button one was pressed 
    elseif($yourForm->two->isChecked()) 
     // button two was pressed 
} 
+0

我有更多的比我的控制器中的一種形式,我想專門檢查是否張貼「投票」..我有isChecked方法作爲最後的選擇 – luca 2011-06-02 09:22:00

0

正如你們所指出第二個按鈕具有相同的名稱將在此改變第一。我能想到的唯一解決方案是爲表單使用viewScript並手動添加按鈕HTML。

我希望這會有所幫助。

問候,

加里

2

您可以嘗試使用array notation的圖像。

+0

你能舉報一個例子 – luca 2011-06-05 00:00:46

0

這是可能的。你會做的是你需要每個提交按鈕屬於主窗體中的不同子窗體或字段集。

這樣,提交按鈕就會被命名空間,您可以將它們添加到表單中。

然後每個提交按鈕將具有相同的名稱。但是,每個提交按鈕的完全限定名稱仍然不同。

例如

$likeSubform = new Zend_SubForm(); 
$dislikeSubform = new Zend_SubForm(); 

$like=new Zend_Form_Element_Image('vote'); 
$like->setImage($config->path->images."up.png") 
    ->setValue(2); 

$dislike=new Zend_Form_Element_Image('vote'); 
$dislike->setImage($config->path->images."down.png") 
     ->setValue(1); 

$likeSubform->addElement($like); 
$dislikeSubform->addElement($dislike); 

$form->addSubForm($likeSubform, 'like'); 
$form->addSubForm($dislikeSubform, 'dislike'); 

//=================================================== 

echo $form->getSubForm('like')->vote->getName(); 

//vote 

echo $form->getSubForm('like')->vote->getFullyQualifiedName(); 

//like[vote] 

不幸的是你,以後當你呈現形式的ViewHelper裝飾附帶ZF會呈現使用完全合格的名稱提交按鈕。 (假設您使用的裝飾,其中大部分人做)

但是然後你可以創建自己的ViewHelper裝飾覆蓋默認,從而使用不合格的名稱,而不是渲染表單元素:

class My_Form_Decorator_ViewHelper extends Zend_Form_Decorator_ViewHelper 
{ 

    //override default render method 
    public function render($content) 
    { 
     ... 

     $name = $element->getName(); 
     $id = $element->getName(); 

     ... 
    } 
} 
相關問題