【问题标题】:Zend_Form_Element: add class if it contains errorsZend_Form_Element:如果包含错误则添加类
【发布时间】:2012-01-24 17:17:18
【问题描述】:

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

如何以更好的方式完成这项工作?

谢谢

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

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

【问题讨论】:

    标签: php zend-framework zend-form


    【解决方案1】:

    这里有一些想法......

    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');
                }
            }
        }
    }
    

    某处,在控制器中...

    $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;
    

    【讨论】:

      猜你喜欢
      • 2021-09-10
      • 2018-07-21
      • 2020-02-17
      • 2013-03-30
      • 1970-01-01
      • 2018-07-17
      • 1970-01-01
      • 1970-01-01
      • 2021-07-01
      相关资源
      最近更新 更多