2012-05-11 126 views
0

在Zend Framework中我試圖創建將自動轉成隱藏的元素,如果只有一個項目的用戶可以選擇選擇元素的Zend_Form_Element_Select更改爲Zend_Form_Element_Hidden。我希望它表現得就像一個選擇元素,如果有一個以上的價值,所以我知道我需要使用擴展類以下內容:基於它的價值

class Application_Form_Element_SingleSelect extends Zend_Form_Element_Select{} 

但我不知道如何得到它的輸出作爲一個隱藏的元素。

更新

這是我想出了最終代碼:

public function render(Zend_View_Interface $view = null){ 
    $options = $this->getMultiOptions(); 

    // check to see if there is only one option 
    if(count($options)!=1){ 
     // render the view 
     return parent::render($view); 
    } 

    // start building up the hidden element 
    $returnVal = '<input type="hidden" name="' . $this->getName() . '" '; 

    // set the current value 
    $keys = array_keys($options); 
    $returnVal .= 'value="' . $keys[0] . '" '; 

    // get the attributes 
    $attribs = $this->getAttribs(); 

    // check to see if this has a class 
    if(array_key_exists('class', $attribs)){ 
     $returnVal .= 'class="' . $attribs['class'] . '" '; 
    } 

    // check to see if this has an id 
    if(array_key_exists('id', $attribs)){ 
     $returnVal .= 'id="' . $attribs['id'] . '" '; 
    } else { 
     $returnVal .= 'id="' . $this->getName() . '" '; 
    } 

    return $returnVal . '>'; 
} 

回答

1

你需要重寫渲染方法,它是負責通過所有裝飾生成HTML添加到該元素。

class Application_Form_Element_SingleSelect extends Zend_Form_Element_Select{ 

public function render(Zend_View_Interface $view = null) 
{ 
    $options = $this->getMultiOptions(); 
    return count($options) > 1 ? parent::render($view) : '' ; 
} 

}