Zend_Form_Element:如果包含错误,则添加类

5 php zend-framework zend-form

在我当前的应用程序中,我想在选择选项包含错误信息(也称为未验证)时为其添加颜色.当表单元素包含一个或多个错误时,它应该有一个错误类(因此我可以相应地设置样式).我尝试循环遍历这些元素,看看它们是否经过验证,但这很快变得非常难看.

我怎样才能以更好的方式完成这项工作?

谢谢

编辑:这是我目前的解决方法(并完成工作,但很脏)

$post = $request->getPost();
foreach ($contactForm->getElements() as $element) {
    if (!$element->isValid($post[$element->getName()])) {
        $element->setAttrib('class', 'error');
    }
}
Run Code Online (Sandbox Code Playgroud)

dre*_*010 5

这里有几个想法......

  1. 您可以使用isValid验证整个表单,而不是在每个表单元素上调用isValid,然后在问题中循环遍历元素,而是if ($element->hasErrors())用于确定是否需要将错误类添加到元素中.

  2. 您可能希望从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');
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在某处,在控制器......

$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;
Run Code Online (Sandbox Code Playgroud)