【问题标题】:zend 1.12 $form->isValid always truezend 1.12 $form->isValid 始终为真
【发布时间】:2026-02-03 14:20:09
【问题描述】:

即使用户名输入为空,此行也始终返回 true

if ($this->getRequest()->isPost() && $form->isValid($this->getRequest()->getPost())) {

我的表单用户名输入如下所示

<?php
$this->addElement(new Zend_Form_Element_Text('username'));
$this->addElement('text','username',
                 array('class' => 'input-large',
                 'value' => $this->user_login,
                 'attribs'    => array('disabled' => 'disabled') /// it can be activated by button in view
));

    $username = new Zend_Form_Element_Text('username');
    $username->addValidator ( new Zend_Validate_NotEmpty() );
?>

但是这样的东西可以工作

$validator = new Zend_Validate_NotEmpty();
          $data = $_POST['username'];
          if($validator->isValid($data)) {

            echo 'sweet';

          }else {

            echo 'bad';
          }

【问题讨论】:

    标签: forms zend-framework


    【解决方案1】:

    将元素设置为必需而不是添加验证器:

    $this->addElement('text','username', array(
        'class' => 'input-large',
        'value' => $this->user_login,
        'attribs' => array('disabled' => 'disabled'),
        'required' => true
    ));
    

    原因是表单元素有一个默认启用的“允许为空”标志,如果打开此标志,您的验证器将不会被使用。我在这个问题中解释了为什么会出现这种情况:Zend Framework notEmpty validator setRequired。相反,设置 required 标志会自动添加 NotEmpty 验证器并更改标志。

    【讨论】:

    • 嘿,添加您的行后它开始工作,但现在我添加了一些新的验证器,如 Alnum 和 EmailAddress 然后我在输入文本中写了“asasdasdasd”,isValid 返回 true
    • 您可以编辑您的问题以包含您现在使用的代码吗?
    • 那是我的错,一切都很好,非常感谢您的修复!