我不确定它是否是我第一次使用 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
希望这对你有帮助..