Zend_Form: Ekran doğrulama ve hata mesajları

2 Cevap php

Bu sayfa kullanıcı girişi kabul ve yönetici bir e-posta gönderdi, sonra tekrar sayfaya dönmek denir hangi dizin gibi sayfaların çoğu denir projemde bir ortak 'İletişim Formu', hakkımızda vs var

Iletişim formu için Code

class Form_Contactus extends Zend_Form
{
  public function init()
  {
    $this->setMethod('post');
    $this->setAction('contactus/index');
    $frontController = Zend_Controller_Front::getInstance();

    $pageName = $this->createElement('hidden','pageName');
    $pageName->setValue( $frontController->getRequest()->getControllerName() );

    $FullName = $this->createElement('text','FullName');
    $FullName->setLabel('Full Name')
      ->setRequired(true)
      ->addFilter('StripTags')
      ->addFilter('StringTrim')
      ->addValidator('NotEmpty');

    $Email = $this->createElement('text','Email');
    $Email->setLabel('Email')
      ->setRequired(true)
      ->addFilter('StringTrim')
      ->addValidator('EmailAddress')
      ->addValidator('NotEmpty');

    $Message = $this->createElement('textarea','Message');
    $Message->setLabel('Message')
      ->setAttribs(  array('rows' => 3, 'cols' => 20 ))
      ->setRequired(true)
      ->addFilter('StripTags')
      ->addFilter('StringTrim')
      ->addValidator('NotEmpty');



    $submit = $this->createElement('submit','submit');
    $submit->setLabel('Submit')
      ->setIgnore(true);

    $this->addElements(array( $pageName,
      $FullName,
      $Email,
      $Message,
      $submit, )
    );
  }
}

Lütfen dikkat, çizgi $ this-> setAction ('bizeulaşın / dizin');. Ben (not bu yaygın bir şeklidir) indeks sayfasından, bu 'bizeulaşın controller' index eylemine geçerken bu formu doldurunuz eğer benim fikir olduğunu. Oradan bir mail gönderdi ve geri indeks sayfasına dönün. Sayfa hakkımızda sayfasından dolu ise, bu bizimle ilgili sayfasına geri dönün.

Bu kod ile vb hakkında indeksi gibi farklı sayfalarda, dahil

$conForm = new Form_Contactus();
echo $conForm;

Ve denetleyici kod gibi gibi görünüyor

class ContactusController extends Zend_Controller_Action
{
  protected $_redirector = null;

  public function init()
  {
    $registry    =   Zend_Registry::getInstance();
    $this->msgObj  =   $registry['MessageHandler'];
  }

  public function indexAction()
  {

    $this->_helper->layout()->disableLayout();
    $this->_helper->viewRenderer->setNoRender();

    $form = new Form_Contactus();

    if ($this->_request->isPost()) {
      $formData = $this->_request->getPost();
      if ($form->isValid($formData)) {

        $pageName     =   $formData['pageName'];
        $FullName     =   $formData['FullName'];
        $Email       =   $formData['Email'];
        $Message     =   $formData['Message'];
        if( strlen(trim( $FullName) ) ){

          $mailBody    .=    "Name:\r\n\t".$FullName ."\r\n\r\n";
          $mailBody    .=    "Email:\r\n\t".$Email ."\r\n\r\n";
          $mailBody    .=    "Message:\r\n\t".$Message ."\r\n\r\n";

          $mail = new Zend_Mail();
          $transport = new Zend_Mail_Transport_Smtp('localhost');
          Zend_Mail::setDefaultTransport($transport);
          $mail->setSubject('Contact Enquiry.');
          $mail->setFrom($Email, $FullName);
          $mail->addTo(CONTACT_ADMIN_EMAIL, CONTACT_ADMIN_NAME);
          $mail->setBodyText($mailBody);

          if( $mail->send() ){
            $this->msgObj->addMessage('Thank you!');
            $this->msgObj->addMessage('Your message has been received and will be reviewed within 72 hours.');
          }
          else{
            $this->msgObj->addError('Unable to sent mail! Please try later.');
          }
        }
      }
      else {
        $this->msgObj->addError('Please correct the following:!');
        $form->populate($formData);
        $pageName = 'index';
      }
    }
    $this->view->form = $form;
    $this->_helper->redirector('index', $pageName);
  }
}

Her şey gayet iyi çalışıyor ve ben formu geçerliliği dışında bu formu doldurmanız halinde posta gitti. Örneğin posta gerekli bir alan olan 'FullName' olmadan gönderilen olabilir

başka bir sorun'' 'gibi mesajlar teşekkür ederiz görüntülemek için değiştiremiyor.

Bu olabilir çünkü $ this-> _helper-> Ben kullanılan yönlendirici yöntemi. Form yönlendirilen ve bu nedenle değerleri kaybolur. I $this->_helper->forwarded kullanın veya $this_forward() o da işe yaramazsa.

Herhangi biri bana düzgün doğrulama iletisi ve diğer mesajları dipsply için bir yöntem önermek misiniz? Benim kötü İngilizce ve peşin teşekkür için özür dilerim

2 Cevap

Form doğrulamak (ve iletişim bilgilerini göndermek) değilse, o zaman yönlendirme yok. Basitçe "geçerli" bloğu içine yönlendirme taşıyın.

Hala formun başarıyla tamamlandıktan sonra geri dönmek için sayfayı saklamak için bir alan ekleyebilirsiniz. Muhtemelen bu olsa, aksi iletişim sayfası olarak kullanılacak farklı bir şekilde doldurma hakkında gitmek gerekir formu ilk doğrulamaz zaman formu bizeulaşın / index eylem (yani oluşturulduğunda sayfa "gidin" zaman)

Ayrıca, aslında posta göndermek için Zend_Mail kullanarak değil bir nedeni var mı? Eğer zaten Zend Framework kullanarak konum beri?

Evet, olabilir, sorun çünkü benim yaklaşım olduğunu yanlıştı. Ben bir denetleyici / sayfa kullanılır. Vb hakkımızda sayfası için index sayfası, Hakkimizda Denetleyicisi örneğin IndexController için bizeulaşın tüm bu sayfalarda ve sorun böylece dahil küçük bir şeklidir. Herkes daha iyi bir yöntem önermek misiniz?