php - Zend_Form_Element : add class if it contains errors

标签 php zend-framework zend-form

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

我怎样才能更好地完成这项工作?

谢谢

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

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

最佳答案

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

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

某处,在 Controller 中...

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

关于php - Zend_Form_Element : add class if it contains errors,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8991132/

相关文章:

php - 在ZF中渲染Form元素时如何删除dd和dt html元素?

checkbox - 在 Zend Form 中使用 viewScript 装饰器时填充复选框

php - 错误 PHP MySQL 调用未定义的方法 mysqli_stmt::get_result()

php - 缺少临时文件夹

php - Zend 多复选框 : set maximum selection

zend-framework - 选择合适的 Zend Framework 异常类

php循环遍历json,不同的属性名

php - PHP docker和使用MySQL PDO

php - Zend Form 无法验证 float

php - 数组输入,如 zend 形式的名称 ="person[]"