2011-09-08 38 views
1

我发现Zend“必需”验证程序比我想要的更早地在我的窗体中生成提示。当表单首次在浏览器中呈现时,在用户提交任何内容之前,它会显示“值是必需的,不能为空”。我希望只在之后才会显示,但提交的内容未通过验证检查。有没有一种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;   
} 
+0

你可以发布一些你创建和显示表单的代码吗? – dinopmi

回答

3

要调用isValid()在第一次显示表单之前,这就是为什么你会收到错误。 $_POST阵列可能是空的。

尝试仅仅验证POST请求,即:

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

希望有所帮助。

+0

啊 - isvalid调用触发标记。得到它了。谢谢。 – user935136

+0

不客气。如果它适合您,您也可以将答案标记为“已接受”;-) – dinopmi