2009-08-06 5 views
9

Ben bir e-posta adresi ve şifresi isteyen bir giriş formuna olarak ZendFramework uygulaması inşa ediyorum - geçersiz e-posta olarak, giriş girişimi ile veritabanı isabet önce e-posta adresini doğrulamak için mantıklı görünüyordu geçerli bir yol asla çarptı. Zend_Validate_EmailAddress gitmek için doğru bir yol gibi görünüyordu, ancak birden fazla hata üreten bir sorun yaşıyorum (altta, koddan sonra soru).Bir Zend_Form'da, Zend_Validate_Email'in birden çok hata üretmesini nasıl önleyebilirsiniz?

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

Ve görünümde, doğrudan echo'd oluyor:

Benim form şu anda doğrudan görünümüne formu geçmesi denetleyici olarak

//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)' 
     ) 
    ))), 
)); 

aşağıdaki sahiptir

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

sonuç anda bu gibi bir şey Bilmek istiyorum istiyorum ne 210

- 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 

: sadece tek bir eposta-geçersiz hata üretir şekilde Zend _ Doğrulama _ EmailAddress yapılandırmak mümkün mü? 'Configure' ile, sınıfı genişletmeden ve mantığı kendi başıma geçersiz kılmaktan kastediyorum.

TIA.

cevap

10

Zend Form Element mesajları özelleştirmek için kullanabileceğiniz çeşitli yöntemler vardır. Dokümanlardan çok açık değildir ancak addErrorMessage(), başarısız doğrulama için tek bir özel hata iletisi oluşturur.

$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); 

Aslında mesajlar iki doğrulayıcılar tarafından üretildi http://framework.zend.com/manual/en/zend.form.elements.html#zend.form.elements.validators.errors

+0

Harika, teşekkürler! Aslında buna rastladım, ama bir şekilde bir hata mesajı eklemenin formu geçersiz kılacağını varsaydı (kendi onayınızı yaptığınız zamanın bir parçası olduğu gibi) .. bu kadar basit olduğunu görmekten memnun oldum! – kander

+2

Kafa karıştırıcı olabilir .. $ email-> addError ($ message) bir hata belirleyecek ve geçersiz olarak işaretleyecektir, ancak $ email-> addErrorMessage ($ message) sadece varsayılanları geçersiz kılan mesajı ayarlıyor gibi görünmüyor. bir hata koydu! – simonrjones

+0

+1, bilgi ipucu için teşekkürler – Ish

1

bu mesajlar bir doğrulayıcı tarafından oluşturulan, ben bir bütün olarak hata oluşturursa üzerinde Zend_Validate_EmailAddress::isValid yöntem, tüm doğrulamaları yapar

:-(mümkün olduğunu düşünmüyorum, öyle görünüyor.

Bir "hacky" çözümü, denetleyicinizde, hataların üzerinde yinelemek ve birden fazla olan her alan için birincisi hariç olmak üzere ... Ancak, sesi gerçekten sevmiyorum bunun ...

012 Yanılıyorsam Elbette, Still


daha devralır ve varsayılan davranışını değiştirmek ... Ama bunu yapmak istemediğini belirtti, bu yüzden ... olabilir, ve bir yol var, bu konuda çok meraklıyım ;-)

+1

bakınız: gibi

Sizin örnek nedenle olmazdı!Zend_Validate_Hostname, Zend_Validate_Email tarafından dolaylı olarak çağrıldı. – kander

3

Pádraic Brady kullanarak tutorial adresine bir göz atın. Zend_Form.

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

+0

Çeviriciyi 5. adımda mı kullanmak istiyorsunuz? Bu, her bir hata türü için varsayılan mesajınızın birden fazla bildirimini gerektiriyor gibi görünüyor. – simonrjones

+0

Hayır, 4. adımı kastediyorum. Tüm iletileri yumuşatmak yerine, e-posta doğrulayıcısından * ilk * iletiyi döndüren özel bir hata çözücüsü yazabilirsiniz. –

+0

Harika bağlantı! Bana göre Monty Python'un 'Sivrisinek Avu' tasvirini hatırlatıyor olsa da, özel dekoratörler başka bir şekilde (simonrjones 'çözümüne kıyasla) istediğimi elde etmek gibi görünüyor. Bu, büyük ihtimalle bunu başarmak için biraz ağır simonrjones çözeltisine kıyasla. – kander

İlgili konular