Zend Form hata mesaj ekleyebilirsiniz

4 Cevap php

Hi I did register form in with zend form

$password = new Zend_Form_Element_Password('password');
$password->setLabel($this->_translate->_("Password:"))
    ->setRequired(true)
    ->addValidator('stringLength', true, array(4, 32));

$confirmPassword = new Zend_Form_Element_Password('confirmpassword');
$confirmPassword->setLabel($this->_translate->_("Confirm Password:"))
    					->setRequired(true);

Ben denetleyicisi şifrenizi ve confirmpassword kontrol. şifrenizi ve confirmpassword eşleşmiyor eğer confirmpassword metin altında hata mesajı ekleyin. ben nasıl yapmak?

4 Cevap

Kavramı temelde $this->_request->getParam('password') karşı test verileri kullanarak, 'confirmpassword' alanına Zend_Validate_Identical doğrulayıcı ekleyerek aşağı kaynar. Ben bütün formlarından sonrası verileri işlemek için uzun bir Zend_Form üzerinde özel bir yöntemi kullanmak, sizin için tam bir çözüm değil, ama belki de benim "editUser" şeklinde benim kod doğru yönde işaret edebilir.

Kumanda:

// $form is a MW_Form_EditUser.

if ($this->_request->isPost() && $form->process($this->_request->getPost()))
{
   // successful form - redirect or whatever here
}

MW_Form_EditUser sınıfından:

public function process(array $data)
{
 // gets a copy of the user we are editing
 $user = $this->getEditable();
 // checks to see if the user we are editing is ourself
 $isSelf = ($user->id == MW_Auth::getInstance()->getUser()->id);

 // if the new_pass field is non-empty, add validators for confirmation of password
 if (!empty($data['new_pass']))
 {
   $this->new_pass2->setAllowEmpty(false)->addValidator(
       new Zend_Validate_Identical($data['new_pass'])
     );
   if ($curpass = $this->current_password) $curpass->setAllowEmpty(false);
 }

 if ($this->delete && !empty($data["delete"])) {
   $this->delete->setValue(true);
   $user->delete();
   return true;
 }

 if ($this->isValid($data))
 {
   /// saves the data to the user
   $user->email = $this->email->getValue();
   $user->name = $this->name->getValue();
   if ($password = $this->new_pass->getValue()) $user->password = $password;
   if (!$isSelf)
   {
     if ($this->super->getValue()) {
       $user->setGroups(array(MW_Auth_Group_Super::getInstance()));
     } else {
       $user->setGroups(array(MW_Auth_Group_User::getInstance()));              
     }                    
   }
   $user->save();
   return true;
 }
 return false;
}

Formdaki isValid geçersiz kılma

/**
     * Validate the form, check passwords.
     *
     * @param  array $data
     * @return boolean
     */
    public function isValid($data) {
        $valid = parent::isValid($data);
        if ($this->getValue('password') !== $this->getValue('password2')) {
            $valid = false;
            $this->password2->addError('Passwords don\'t match.');
        }

        return $valid;
    }

Temiz bir çözüm bir özel Validator sınıfı oluşturmak olacaktır

Kimden Zend Framework Reference Guide:

class My_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;
    }
}

$context değişkeni validator doğrulama gerçekleştirmek için başka form alanları erişmenize olanak sağlar.

Daha sonra yazarsınız:

$confirmPassword->addValidator('My_Validate_PasswordConfirmation');

Bu yöntem endişeleri daha iyi ayrılmasını sağlar - bu muhtemelen denetleyicisi olarak ele alınması gereken bir şey değil.

Umut olur.

Zend_Validate_Identical kullanarak Zend tarafından sizin için iyi bir çözümdür. Sana başka seçenek verecektir. jQuery. Eğer Zend_Validate_Identical formu kullanarak zaman sunucuya gidecek ve sunucu bunu doğrular. Şifreler aynı değilse bir hata mesajı döndürür. JQuery form kullanırsanız, şifreleri aynı sürece sunucuya gitmeyecek.