根据它的值将Zend_Form_Element_Select更改为Zend_Form_Element_Hidden

时间:2012-05-11 14:30:04

标签: zend-framework zend-form

在Zend Framework中,我正在尝试创建一个select元素,如果用户只能选择一个项目,它将自动变成一个隐藏元素。我希望它的行为就像Select元素一样,如果它有多个值,所以我知道我需要使用以下内容扩展类:

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 个答案:

答案 0 :(得分: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) : '' ;
}

}