2012-09-04 102 views
1

我認爲$ form-> addVlidator函數作爲一些前端表單檢查的事情,但是當我添加它時,即使輸入無效,它似乎仍然是submited形式。addValidator如何與Zend Form搭配使用?

或者我錯了,它更多的是控制器端檢查,這意味着表單將提交數據,然後服務器端返回錯誤消息?

我的代碼是這樣工作的。

Form類:

<?php 
class Application_Form_Test extends Zend_Form 

{ 
    public function init() 
    { 

     $this->setName('stdForm'); 
     //$this->setMethod('post'); 
     //$this->addDecorator('HtmlTag', array('tag' => 'div', 'class' => 'my-lovely-form')); 
     $this->setAttrib('enctype', 'multipart/form-data'); 

     $this->setAction('somewhere') 
      ->setMethod('post'); 


     $username = $this->createElement('text', 'name', array('label' => 'Username:')); 
     $username->addValidator('alnum') 
       ->addValidator('regex', false, array('/^[a-z]+/')) 
       ->addValidator('stringLength', false, array(9, 20, 'messages'=>'Cannot be more than 9 chars')) 
       ->setRequired(true) 
       ->addFilter('StringToLower'); 

     $email = $this->createElement('text', 'email', array('label' => 'E-mail')); 
     $email->addValidator('StringLength', false, array(8)) 
       ->setRequired(true); 

     $password = $this->createElement('password', 'pass1', array('label' => 'Password')); 
     $password->addValidator('StringLength', false, array(6)) 
       ->setRequired(true); 

     $password2 = $this->createElement('password', 'pass2', array('label' => 'Repeat password')); 
     $password2->addValidator('StringLength', false, array(6)) 
       ->setRequired(true); 

     $message = $this->createElement('textarea', 'message', array('label' => 'Message')); 
     $message->addValidator('StringLength', false, array(6)) 
       ->setRequired(true) 
       ->setAttrib('COLS', '40') 
       ->setAttrib('ROWS', '4'); 

      $captcha = new Zend_Form_Element_Captcha('foo', array(
       'label' => "human?", 
       'captcha' => 'Figlet', 
       'captchaOptions' => array(
        'captcha' => 'Figlet', 
        'wordLen' => 6, 
        'timeout' => 300, 
       ), 
      )); 

     // Add elements to form: 
     $this->addElement($username) 
      ->addElement($email) 
      ->addElement($password) 
      ->addElement($password2) 
      ->addElement($message) 
      ->addElement($captcha) 
      // use addElement() as a factory to create 'Login' button: 
      ->addElement('submit', 'send', array('label' => 'Form sender')); 

    } 
} 

控制器代碼:

public function aboutAction() 
{ 
    $this ->_helper->layout->disableLayout(); 

    $form = new Application_Form_Test(); 

    $this->view->testForm = $form;   
} 

查看文件:

<?php echo $this->testForm;?> 

回答

0

第二種:「表單將數據提交任何那麼服務器端返回錯誤消息「。爲了做到這一點,您必須在您的操作中撥打$form->isValid($this->_request->getPost())

如果它不是有效的,那麼你需要將數據發回給用戶:

$form->populate($this->_request->getPost()); 
$this->view->form = $form; 

對於客戶端驗證,你可以使用http://docs.jquery.com/Plugins/Validation