在我目前的应用程序中,我想在选项选项包含错误信息(也就是未经过验证)时为其添加颜色。当表单元素包含一个或多个错误时,它应该有一个错误类(因此我可以相应地设置样式)。我尝试循环遍历这些元素,并查看它们是否经过验证,但这很快就变得非常难看。
我如何以更好的方式完成这项工作?
由于
编辑:这是我目前的解决方法(并完成工作,但很脏)
$post = $request->getPost();
foreach ($contactForm->getElements() as $element) {
if (!$element->isValid($post[$element->getName()])) {
$element->setAttrib('class', 'error');
}
}
答案 0 :(得分:5)
以下是一些想法...
您可以使用isValid验证整个表单,而不是在每个表单元素上调用isValid,然后在问题中循环遍历元素,而是使用if ($element->hasErrors())
来确定是否需要将错误类添加到元素中。
您可能希望从Zend_Form扩展并向您的新Form类添加一个帮助器方法。例如,添加一个名为highlightErrorElements()
的方法或类似的方法,如果您对$form->isValid()
的调用失败,则可以简单地调用$form->highlightErrorElements()
,它将遍历每个表单元素并查看是否它有错误并在必要时应用该样式。
示例:
<?php
class Application_Form_Base extends Zend_Form
{
public function __construct()
{
// this is where i normally set up my decorators for the form and elements
// additionally you can register prefix paths for custom validators, decorators, and elements
parent::__construct();
// parent::__construct must be called last because it calls $form->init()
// and anything after it is not executed
}
public function highlightErrorElements()
{
foreach($this->getElements() as $element) {
if($element->hasErrors()) {
$element->setAttrib('class', 'error');
}
}
}
}
在某处,在控制器......
$form = new Application_Form_Register(); // this extends Application_Form_Base
if ($form->isValid($this->getRequest()->getPost())) {
// add user etc
} else {
$form->highlightErrorElements();
// other error logic
}
$this->view->form = $form;