从Zend Forms中的无线电元素渲染单个选项

时间:2013-12-11 14:48:58

标签: php zend-framework

我在Zend表单中有这个元素

$genderOptions = array( 'male'=>'male', 'Female'=>'Female');
$gender= new Zend_Form_Element_Radio('gender');
$gender->setDecorators(array('ViewHelper'))
       ->setAttrib('name', 'gender')
       ->setAttrib('class', 'required error pull-right')
       ->setAttrib('id', 'gender')
       ->setRequired(false)
       ->setMultiOptions($genderOptions);

我想在viewscript(phtml文件)中单独检索输入。我试过了  如

 <div>
 <span>Male</span>
    echo $this->myForm->gender['male'];
 </div>


<div>
<span>Female</span>
 echo   $this->myForm->gender['female'];
</div>

我怎样才能使用Zend Form?

由于

1 个答案:

答案 0 :(得分:0)

对于展开Zend_Form_Element_Multi的表单元素,您可以使用getMultiOption($option)来获取单个选项。

<强> View.phtml

<div>
  <span>Male</span>
  <?php echo $this->myForm->gender->getMultiOption('male'); ?>
</div>
<div>
  <span>Female</span>
  <?php echo $this->myForm->gender->getMultiOption('female'); ?>
</div>

或者,您可能希望在尝试使用该选项之前检查该选项是否可用(或者您将获得NULL

<?php
  $gender = $this->myForm->gender;
  $option = $gender->getMultiOptions(); // returns assoc array

  if (isset($option['male'])) 
    printf('<div><span>Male</span>%s</div>', $option['male']);
  if (isset($option['female'])) 
    printf('<div><span>Female</span>%s</div>', $option['female']);
?>

修改

重新阅读你的问题,我可以看到你正在寻找各个无线电元素,而不是价值。

这可能更难实现,因为Zend_Form_Element_Radio类实际上代表所有无线电选项;视图帮助器Zend_View_Helper_FormRadio在每个“选项”(即男性,女性)上循环,并返回已包含每个<input type="radio"/>的完整HTML字符串。

令人震惊的是,Zend_View_Helper_FormRadio助手实际上在一个方法中包含了所有HTML生成代码;这使得很难在不重复的情况下覆盖它。

就个人而言,我会:

  • 创建一个新的帮助MyNamespace_View_Helper_CustomFormRadio,展开Zend_View_Helper_FormElement
  • Zend_View_Helper_FormRadioFormRadio())的全部内容复制到新助手中
  • 修改创建每个广播input的部分。

例如

 $radio = '<div><span'
  . $this->_htmlAttribs($label_attribs) . '>'
  . (('prepend' == $labelPlacement) ? $opt_label : '')
  . '<input type="' . $this->_inputType . '"'
  . ' name="' . $name . '"'
  . ' id="' . $optId . '"'
  . ' value="' . $this->view->escape($opt_value) . '"'
  . $checked
  . $disabled
  . $this->_htmlAttribs($attribs)
  . $this->getClosingBracket()
  . (('append' == $labelPlacement) ? $opt_label : '')
  . '</span></div>';
  • 然后,您可以使用$this->customFormRadio()
  • 在视图中使用它