zend验证器过早的消息

时间:2011-09-08 15:23:22

标签: zend-framework

我发现Zend“必需”验证器在我的表单中生成的提示比我想要的更早。首次在浏览器中呈现表单时,在用户提交任何内容之前,它会显示“值是必需的,不能为空”。我希望只在提交未通过验证检查的内容后才显示。是否有Zend标准的方法来做到这一点,或者我是否需要编写能够按照我想要的方式使其成为有状态的东西?

我是新手,所以我认为这是非常基本的东西:

以下是表格:

class Application_Form_Login extends Zend_Form
{


    public function init()
    {
        /* Form Elements & Other Definitions Here ... */
        $this->setMethod('post');

        $this->addElement(
            'text', 'username', array(
                'label' => 'Username:',
                'required' => true,
                'filters' => array('StringTrim'),       
            )
        );

        $this->addElement('submit', 'submit', array(
            'ignore' => true,
            'label' => 'Login', 
        ));
    }
}

使用此代码显示:

public function indexAction()
{
    // action body
    $db = $this->_getParam('db');
    $loginForm = new Application_Form_Login();

    if($loginForm->isValid($_POST)) {
        $adapter = new Zend_Auth_Adapter_DbTable(
            $db,
            'users',
            'username',
            'password',
            );
        $adapter->setIdentity($loginForm->getValue('username'));
        $adapter->setCredential($loginForm->getValue('password'));

        $auth = Zend_Auth::getInstance();
        $result = $auth->authenticate($adapter);

        if ($result->isValid()) {
            $this->_helper->FlashMessenger('Successful Login');
            $this->redirect('/');
            return;
        } else {
            $this->_helper->FlashMessenger('Unsuccessful Login');
        }

    }
    $this->view->loginForm = $loginForm;        
}

1 个答案:

答案 0 :(得分:3)

您在第一次显示表单之前正在调用isValid(),这就是您收到错误的原因。可能$_POST数组是空的。

尝试仅验证POST请求,即:

if ($this->getRequest()->isPost()) {
    if($loginForm->isValid($_POST)) { 
       ...
    }
}

希望有所帮助。