我结束了使用自定义的观点,我泛化,以任意形式工作。
使用这种方法,我能够做以下事情:在一个DIV
所需的表单元素的标签后添加一个星号
组输入和错误在一起,这样,当我漂浮标签的左侧东西还是排队
添加一个特殊的类来示数输入,这样我就可以凸显他们
更改某些错误信息,包括该元素的名称,而不是“价值”
传递文字注释与表单元素沿下输入要显示
在特殊元素
有些事情是不可能没有viewscript,有的只是一个痛苦的不换标签和输入实行。我认为这个解决方案对我而言将会更加灵活。
在我的辅助类render()功能:
$view = new Zend_View();
$view->setBasePath(SRC_ROOT . "/templates/forms");
$this->setDecorators(array(array('ViewScript', array('viewScript' => 'viewscript.php'))));
这是我的viewscript:
<?php foreach($this->element as $element) { ?>
$decorators = $element->getDecorators();
if(isset($decorators["Zend_Form_Decorator_Label"])) {
$label = $element->getLabel();
} else {
$label = "";
}
if($element->isRequired() === true) {
$label .= " *";
}
?>
// Add the error class to make the form inputs highlight in red
if($element->hasErrors()) {
$attribs = $element->getAttribs();
if(!isset($attribs["class"])) {
$attribs["class"] = "";
}
$attribs["class"] .= " inputError";
$element->setAttribs($attribs);
}
// Print the input using Zend_Form's own mechanisms
$element->setDecorators(array('ViewHelper')); // Removes all decorators (labels, etc.)
$v = new Zend_View();
$element->setView($v);
echo $element->render();
if(isset($element->note)) {
echo "
{$element->note}
";}
// Print the error messages
if($element->hasErrors()) {
$errors = $element->getMessages();
?>
- ">
foreach($errors as $error => $message) {
// Custom error messages
if($error === "isEmpty") {
$message = $element->getLabel() . " cannot be empty";
} ?>
<?php echo $message ?>