我希望以下html包含zend形式的两个单选按钮组
<label class="inline">
<input type="radio" name="form-field-radio">
<span class="lbl"> Male</span>
</label>
<label class="inline">
<input type="radio" name="form-field-radio">
<span class="lbl"> Female</span>
</label>
我正在使用以下代码在Zend Form中创建此按钮
$gender = $this->CreateElement('radio','gender')
->addFilter(new Zend_Filter_StringTrim())
->setMultiOptions(array('M'=>'Male', 'F'=>'Female'))
->setDecorators(array( array('ViewHelper') ));
但是我不知道在这段代码中设置lable和span类的位置。
请帮忙。
感谢。
答案 0 :(得分:0)
我不确定它是否是我第一次使用zend框架时这样做的完美方法,但是如果你觉得有用的话,我仍然会采取以下步骤:
首先,我创建了一个自定义装饰器,它扩展了Zend_Form_Decorator_Abstract
并将其保存在'decorator/My_Form_Decorator.php'
位置。 decorator是我在root中创建的目录。
.
/decorator
/application
等...
然后我将它包含在控制器中。我已经读过有一些方法可以添加像addPrefixPath()
这样的装饰器,但是为了时间的缘故,我只是将装饰器文件包含在'include "../decorator/My_Form_Decorator.php";'
的顶部。然后使用CreateElement
方法而不是Zend_Form_Element
方法。
以下是自定义无线电装饰器的代码
My_Form_Decorator.php
class My_Decorator_RadioInput extends Zend_Form_Decorator_Abstract
{
public function render($content)
{
$element = $this->getElement();
$label = htmlentities($element->getLabel());
$type = $element->type;
$name = $element->elemName;
$multiOptions = $element->multiOptions;
$labelClass = $element->labelClass;
$spanClass = $element->spanClass;
$markup='';
if(!empty($type) && !empty($name) && !empty($multiOptions) && is_array($multiOptions)){
foreach($multiOptions as $key=>$value){
$markup .='<label class="'.$labelClass.'"><input type="radio" name="'.$name.'" value="'.$key.'"> <span class="'.$spanClass.'">'.$value.'</span></label>';
}
}
return $markup;
}
}
这是我的控制器功能中的代码
IndexController.php
$decorator = new My_Decorator_RadioInput();
$form = new Zend_Form();
$form->setAttrib('id', 'test');
$element = new Zend_Form_Element('foo', array(
'elemName'=>'gender',
'type' =>'radio',
'multiOptions' => array('M'=>'Male', 'F'=>'Female'),
'labelClass'=>'inline',
'spanClass'=>'lbl',
'decorators' => array($decorator),
));
$form->addElement($element);
$this->view->form = $form;
并在视图中查看index.phtml
echo $this->form
希望这对你有帮助..