0

在 Zend Framework 中,我试图创建一个选择元素,如果用户只能选择一个项目,它将自动变成隐藏元素。如果它具有多个值,我希望它的行为就像一个 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 . '>';
}
4

1 回答 1

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) : '' ;
}

}
于 2012-05-11T15:16:01.670 回答