Bir Zend_Form, nasıl birden fazla hata üretmesini Zend_Validate_Email önlemek için?

3 Cevap php

Geçersiz bir e-posta geçerli bir hit yol asla gibi, oturum açma girişimi ile veritabanı isabet önce e-posta adresini doğrulamak için mantıklı görünüyordu - Ben bir e-posta adresi ve şifre soran bir giriş formu olarak ZendFramework uygulama inşa ediyorum. Zend_Validate_EmailAddress gitmek için doğru bir yol gibi görünüyordu, ama birden hataları (kodundan sonra altta soru) üreten bir sorun yaşıyorum.

Benim form şu anda aşağıdaki vardır

//WPMail_Form_Login::init()
$email = $this->addElement('text', 'email', array(
    'label'=>'Email',
    'required'=>true,
    'filters'=>array('stringtrim'),
    'validators'=>array(array('emailaddress', true, array(
        'messages'=>array(
            'emailAddressInvalidHostname'=>'Your email address is invalid',
            'emailAddressInvalidFormat'=>'Your email address is invalid',
            '...'=>'(repeat for all message templates)'
        )
    ))),
));

Denetleyicisi ben doğrudan görünümüne formu geçmek:

// WPMail_AuthController::loginAction()
$this->view->form = $form;

Ve görünümünde, doğrudan echo'd ediyor:

// views/scripts/auth/login.phtml
<?php echo $this->form ?>

Sonuç şu anda böyle bir şey olur:

- Your email address is invalid
- 'asda!!!' does not match the expected structure for a DNS hostname
- 'asda!!!' does not appear to be a valid local network name

Ben bilmek istiyorum istediğiniz nedir: o sadece bir tek e-posta geçersiz hata üretir böyle bir şekilde Zend _ Validate _ EpostaAdresi yapılandırmak mümkün mü? Configure 'I sınıfını genişletme ve kendi ile mantığı geçersiz olmadan yani.

TIA.

3 Cevap

Zend Form Element iletileri özelleştirmek için kullanabileceğiniz çeşitli yöntemler vardır. Bu dokümanlar gelen korkunç net değil ama addErrorMessage () başarısız doğrulama tek bir özel hata mesajı belirler.

Sizin örnek nedenle gibi görünecektir:

$email = new Zend_Form_Element_Text('email');
$email->setLabel('Email')
	  ->setRequired(true)
	  ->addFilter('stringtrim')
	  ->addValidator('emailAddress', true)
	  ->addErrorMessage('Your email address is invalid');
$this->addElement($email);

Bkz http://framework.zend.com/manual/en/zend.form.elements.html#zend.form.elements.validators.errors

Kullanarak Pádraic Brady bu tutorial Çıkış Zend_Form.

Özellikle bölüm "Adım 4: Özel bir Dekoratör ile işleme Hata Mesajları."

Bu iletiler one onaylayıcısı tarafından oluşturulan gibi, ben bunun mümkün olduğunu sanmıyorum :-(

Zend_Validate_EmailAddress::isValid yöntemi, tüm doğrulamaları yapan bir bütün olarak hataları oluşturur üzerinde görünüyor.

Bir "hacky" çözüm hataları, sizin denetleyicisi, yineleme, ve birden fazla olan her alan için, ilkinden ama kaldırmak olacaktır ... Ama bu sesi gerçekten sevmiyorum .. .


You could, of course, inherit than and modify the default behaviour... But you stated you didn't want to do that, so...


Still, if I'm wrong, and there is a way, I'm very curious about it ;-)