在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 . '>';
}
答案 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) : '' ;
}
}