我结束了使用自定义的观点,我泛化,以任意形式工作。
使用这种方法,我能够做以下事情:在一个DIV
- 所需的表单元素的标签后添加一个星号
- 组输入和错误在一起,这样,当我漂浮标签的左侧东西还是排队
- 添加一个特殊的类来示数输入,这样我就可以凸显他们
- 更改某些错误信息,包括该元素的名称,而不是“价值”
- 传递文字注释与表单元素沿下输入要显示
- 在特殊元素
有些事情是不可能没有viewscript,有的只是一个痛苦的不换标签和输入实行。我认为这个解决方案对我而言将会更加灵活。
在我的辅助类render()
功能:
$view = new Zend_View();
$view->setBasePath(SRC_ROOT . "/templates/forms");
$this->setDecorators(array(array('ViewScript', array('viewScript' => 'viewscript.php'))));
这是我的viewscript:
<link rel="stylesheet" type="text/css" href="/styles.css" />
<form id="<?php echo $this->element->html_id ?>" class="<?php echo $this->element->html_class ?>" enctype="application/x-www-form-urlencoded" action="" method="post">
<?php foreach($this->element as $element) { ?>
<?php
$decorators = $element->getDecorators();
if(isset($decorators["Zend_Form_Decorator_Label"])) {
$label = $element->getLabel();
} else {
$label = "";
}
if($element->isRequired() === true) {
$label .= " *";
}
?>
<label class="label" for="<?php echo $element->getName(); ?>"><?php echo $label; ?></label>
<div class="formInput">
<?php
// 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 "<p>{$element->note}</p>";
}
// Print the error messages
if($element->hasErrors()) {
$errors = $element->getMessages();
?>
<ul class="errors <?php echo sizeof($errors) == 1 ? "noDecorations" : "" ?>">
<?php
foreach($errors as $error => $message) {
// Custom error messages
if($error === "isEmpty") {
$message = $element->getLabel() . " cannot be empty";
} ?>
<li><?php echo $message ?></li>
<?php } ?>
</ul>
<?php } ?>
</div>
<div style="float: clear;"></div>
<?php } ?>
</form>
是否有我应该怎么写那个人,通用表单元素工作viewscripts任何文件?我所看到的全部是如何为整个表单编写一个viewscript,这不是我所追求的。我喜欢我可以将元素对象传递给Zend_Form,并且它可以呈现没有我为每个我需要的表单编写HTML的东西,我只是希望它呈现不同的东西*。 – spiffytech 2013-04-24 13:29:24
搜索setElementDecorators() – konradwww 2013-04-24 14:00:29