
Mam taką sytuację:
Akcja kontrolera generuje formularz, który w parametrze action ma inną akcję tego kontrolera. Po submicie, jak wiadomo, przetworzenie danych, dodatkowa walidacja, jakieś komunikaty o niepowodzeniu lub powodzeniu operacji. Chciałabym, żeby po wyświetleniu takiego komunikatu (np. o powodzeniu akcji) strona odczekała kilka sekund a potem nastąpiło przekierowanie z powrotem do formularza. Niestety w tym momencie wygląda to tak, że formularz nie przechodzi na stronę kontrolera podanego w action, nie wyświetlają się żadne komunikaty, tylko przez kilka sekund się odświeża. W sensie, wygląda jakby od razu wykonywał się redirect który trwa aż kilka sekund (zend postawiony lokalnie na wampie).
Kod:
public function changeAction() { $login = $this->_getParam('login'); //sprawdzenie czy klient istnieje $clientData = $this->clientTable->fetchRow('ClientLogin = "'.$login.'"'); if($clientData != null) { $this->changeForm->setMethod('post') ->setAction('/client/changeform'); //elementy .... //walidatory .... //filtry .... //złożenie formularza $this->changeForm->addElement($login_input) .... ->addElement($submit); //przekazanie formularza do widoku $this->view->changeForm = $this->changeForm; } else { $this->view->changeMessage = '<div class="red-alert">Nie znaleziono użytkownika o podanym loginie.</div>'; } } public function changeformAction() { if ($this->_request->isPost() && $this->changeForm->isValid($_POST)) { $login = $this->_request->getPost('login_input'); //sprawdzenie hasła if(...) { $this->view->changeMessage = '<div class="red-alert">Niepoprawne hasło</div>'; $this->_redirect('/client/change/login/'.$login); return; } ..... ); //update rekordu $check = $this->clientTable->update($data, 'ClientLogin = "'.$login.'"'); if($check<=0){ $this->view->changeMessage = '<div class="red-alert">Błąd</div>'; $this->_redirect('/client/change/login/'.$login); return; } $this->view->changeMessage = '<div class="green-alert">Operacja udana</div>'; $this->_redirect('/client/change/login/'.$login); } }