2012-09-23 3 views
3

Je suis un débutant à zend framework. Je développe une application simple d'inscription d'utilisateur dans zend. J'ai à la fois ajouter et modifier des fonctionnalités dans mon application. Je peux ajouter un nouvel utilisateur parfaitement en utilisant mon application. Mais lorsque j'essaie d'éditer des informations utilisateur autres que le mot de passe, les validateurs utilisés pour les champs password et passwordConfirmation donnent des erreurs. Je dois supprimer/désactiver les validateurs des champs de mot de passe et de confirmation de mot de passe uniquement lorsque je veux modifier les informations d'utilisateur autres que le mot de passe.Comment utiliser une validation de champ identique pour l'opération d'ajout et de modification sous forme zend?

Ma forme:

$password = new Zend_Form_Element_Password('password'); 
     $password->setRequired(true) 
     ->addFilter('StringTrim') 
     ->addFilter('StripTags') 
     ->addValidator('NotEmpty', false, array('messages'=>'password cannot be empty')) 
     ->addValidator('StringLength', false, array(2, 20, 'messages'=>'password must be 2-20 character')) 
     ->setLabel('Password:'); 
     $this->addElement($password); 

     $confirmPassword = new Zend_Form_Element_Password('confirmPassword'); 
     $confirmPassword->setRequired(true) 
     ->addFilter('StringTrim') 
     ->addFilter('StripTags') 
     ->addValidator('NotEmpty', false, array('messages'=>'password do not match')) 
     ->addValidator(new Application_Validate_PasswordConfirmation()) 
     ->setLabel('Retype password'); 

Ma classe validateur:

class Application_Validate_PasswordConfirmation extends Zend_Validate_Abstract 
{ 
    const NOT_MATCH = 'notMatch'; 

    protected $_messageTemplates = array(
    self::NOT_MATCH => 'Password confirmation does not match' 
    ); 

    public function isValid($value, $context = null) 
    { 
     $value = (string) $value; 
     $this->_setValue($value); 

     if (is_array($context)) { 
      if (isset($context['password']) && ($value == $context['password'])) 
      { 
       return true; 
      } 
     } elseif (is_string($context) && ($value == $context)) { 
       return true; 
      } 

     $this->_error(self::NOT_MATCH); 
     return false; 
    } 
} 

Répondre

4
$modelUsers = new Model_Users(); 
    $userId = $this->_getParam('userId'); 

    if ($userId) { 
     $populateData = array(); 

     $user = $modelUsers->fetch($userId); 

     if ($user instanceof Model_User) { 
      $populateData = $user->toArray(); 
     } 
     $form = $this->_getAddForm($user->email, $user->username, $user->phone); 
     $password = $this->getRequest()->getPost('password'); 
     if (trim($password) == '') { 
      $form->getElement('password') 
      ->setRequired(false) 
      ->clearValidators(); 

      $form->getElement('confirmPassword') 
      ->setRequired(false) 
      ->clearValidators(); 
     } 

    } 
    else { 
     $form = $this->_getAddForm($mail=null, $username=null, $phone=null); 
    } 
    $request = $this->getRequest(); 

    if ($request->isPost()) { 

     $post = $request->getPost(); 
     if ($form->isValid($post)) { 
      $values = $form->getValidValues($post); 

Voilà comment je résous ce problème définitivement avec l'aide de @ drew010

3

Lorsque le formulaire est soumis en mode édition, supprimer les validateurs en utilisant le code suivant avant d'appeler $form->isValid():

$password = $this->getRequest()->getPost('password'); 
if (trim($password) == '') { // password field empty, remove validators 
    $form->getElement('password') 
     ->setRequired(false) 
     ->clearValidators(); 

    $form->getElement('confirmPassword') 
     ->setRequired(false) 
     ->clearValidators(); 
} 

if ($form->isValid($this->getRequest()->getPost())) { 
    // ... 
} 
+0

, Comment puis-je reconnaître que le formulaire est soumis en mode édition. Je ne vois aucune différence entre éditer et soumettre à l'exception de la population de formulaire. Comme je suis très nouveau à zend framework pouvez-vous l'expliquer un peu. Merci – minhaz

+0

Dans un cas vous n'avez pas de données et vous devez créer un utilisateur, dans l'autre vous devez le pré-remplir et probablement la personne est connectée? – drew010

+0

Oui, mais je remplis le formulaire à partir du contrôleur. Dois-je ajouter votre code dans le contrôleur – minhaz

Questions connexes