2016-03-20 20 views
0

Bu I bulunan çözümler çalıştıZend çerçevesinde sayfayı yenilemek için form gönderme nasıl engellenir?

public function invite() 
{ 
    if($this->getRequest()->isPost()){ 
     $data_array       = $this->getAllParams(); 
     $emailList       = explode(",", $data_array['emails']); 
     $message       = $data_array['message']; 

     $error_emails      = array(); 


     if(sizeof($emailList) <= 1){ 
      $this->view->message  = '<div class="alert alert-danger"> Please enter more than one email address and please separate emails by a "," (comma)</div>';  
     } 
     else{ 
      $x = 0; 
      foreach($emailList as $singleEmail){ 

       if (!filter_var(trim($singleEmail), FILTER_VALIDATE_EMAIL)) { 
        $error_emails[]    = $singleEmail; 
       } 
       else{ 
        //send emails here 
        $x++; 
       } 

      } 

      if(sizeof($error_emails) > 0){ 
       $email_str = implode(",",$error_emails); 
       if($x > 0){ 
        $this->view->message = '<div class="alert alert-success"> Successfully Sent! </div> '; 
       } 
       $this->view->message  .= '<br /><div class="alert alert-danger"> Message to this emails were not sent! <b>'.$email_str.'</b> <br /> Please enter valid emails!</div>';  
      }else{ 
       $this->view->message  = '<div class="alert alert-success"> Successfully Sent! </div>';  
      } 
     } 
     $request = $this->getRequest(); 
     $request->setParam('emails', null); 
     $request->setParam('message', null);    
    } 

} 

benim denetleyicisinde benim eylem olduğu; Gördüğünüz gibi değerleri null olarak ayarlamak için setParam yöntemini denedim. Ne yazık ki, bu işe yaramıyor. da unset dizisi işe yaramadı, doğru yaptığımdan emin değilim. Neyse, yönlendirmek istemiyorum. Sadece unset yapmak istiyorum. Birisi bana yardım edebilir mi? Bunu birkaç saatliğine deniyorum. Şimdiden teşekkürler. https://en.wikipedia.org/wiki/Post/Redirect/Get

Zend Framework Kısacası PRG kontrolörü eklentisi http://framework.zend.com/manual/current/en/modules/zend.mvc.plugins.html#post-redirect-get-plugin sağlar, bu mağazaları: Bu sorun Zend Framework özgü değildir

+0

gönderirken yani bir başlık http://php.net/manual/en/function.header.php deneyin bir belirteci kullanabilirsiniz zend içinde CSRF koruması kullanın ve yeniden validasyona zorlayabilir. Oturumlar/jetonlar da başka bir seçenektir. –

+1

Yönlendirmeyi engellemenin nedeni nedir? – max

+0

Neden FlashMessenger denetleyici eklentisi yerine html's string kullanıyor? – Hooli

cevap

2

, formların yeniden gönderimlerin başa (Mesaj Yönlendirme kısaltması alın) bir PRG denilen model vardır oturumdaki verileri yayınlar ve yeniden yönlendirir, daha sonra gelen istek üzerine bu kaydedilen posta verilerini döndürür.

Örnek kod PRG eklentisi yönlendirme yaptığını sonra GET isteği formu işlemek düşündürmektedir:

// Pass in the route/url you want to redirect to after the POST 
$prg = $this->prg('/user/register', true); 

if ($prg instanceof \Zend\Http\PhpEnvironment\Response) { 
    // returned a response to redirect us 
    return $prg; 
} elseif ($prg === false) { 
    // this wasn't a POST request, but there were no params in the flash messenger 
    // probably this is the first time the form was loaded 
    return array('form' => $form); 
} 

// $prg is an array containing the POST params from the previous request 
$form->setData($prg); 

if($form->isValid()) { 
    ... 

Ama bunu anlayışla katılmıyorum ve her zaman POST formu işlemek için önermek ve dolu verilerle formu göstermek için PRG kullanmak ve doğrulama mesajları sonradan ($form burada Zend\Form bir örneğidir unutmayın):

if($this->getRequest()->isPost()) { 
    $form->setData($this->getRequest()->fromPost()); 
    if ($form->isValid()) { 
     //handle form 
     // if you don't need to show form again, redirect: 
     return $this->redirect()->toRoute('some/route'); 
    } 
} 

// And now do PRG to re-display form with data and validation errors 
$prg = $this->prg('/user/register', true); 

if ($prg instanceof \Zend\Http\PhpEnvironment\Response) { 
    // returned a response to redirect us 
    return $prg; 
} elseif ($prg === false) { 
    // this wasn't a POST request, but there were no params in the flash messenger 
    // probably this is the first time the form was loaded 
    return array('form' => $form); 
} 

// $prg is an array containing the POST params from the previous request 
$form->setData($prg); 
// make sure form have validation result to display 
$form->isValid(); 
return array('form' => $form); 

Ama formları kullanarak olmadığı için, el ile iki kez verileri doğrulamak gerekir. Bir kez işlemek ve hata mesajlarını görüntülemek için bir kez. Zend \ Form bileşenini kullanmak istemiyorsanız, girişi doğrulamak için Zend \ InputFilter'a bakmanızı öneririm.

İlgili konular