Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Symfony]try...catch
Forum PHP.pl > Forum > PHP > Frameworki
Gribo
Mam taki problem, próbuje zrobić prosty zapis formularza do bazy oto kod :
  1. <?php
  2. public function executeIndex(sfWebRequest $request)
  3.  {
  4.    $this->form = new RejestracjaForm();
  5.    if ($this->getRequest()->isMethod('post')) {
  6.        $this->form->bind(array('login'=>$this->getRequest()->getParameter('login'),
  7.                          'haslo'=>$this->getRequest()->getParameter('haslo'),
  8.                          'powtorz'=>$this->getRequest()->getParameter('powtorz'),
  9.                          'imie'=>$this->getRequest()->getParameter('imie'),
  10.                          'nazwisko'=>$this->getRequest()->getParameter('nazwisko'),
  11.                          'mail'=>$this->getRequest()->getParameter('mail'),
  12.                          ));
  13.        
  14.        if ($this->form->isValid()) {          
  15.            try {
  16.                $r = new Uzytkownicy();
  17.                $r->setLogin($request->getParameter('login'));
  18.                $r->setHaslo($request->getParameter('haslo'));
  19.                $r->setImie($request->getParameter('imie'));
  20.                $r->setNazwisko($request->getParameter('nazwisko'));
  21.                $r->setMail($request->getParameter('mail'));
  22.                $r->setMiasto($request->getParameter('miasto'));
  23.                $r->setOsobie($request->getParameter('osobie'));
  24.                $r->setData2(date("Y-m-d"));
  25.                $r->save();
  26.                return $this->forward('rejestracja','dziekujemy');              
  27.            } catch (sfException $e) {
  28.                return $this->forward('rejestracja','blad');  
  29.            }  
  30.        }
  31.    }
  32.  }
  33.  
  34.  public function executeDziekujemy(sfWebRequest $request) {
  35.      $this->setTemplate('dziekuje');
  36.  }
  37.  public function executeBlad(sfWebRequest $request) {
  38.      $this->setTemplate('blad');
  39.  }
  40. ?>


i po odpaleniu wszytsko działa ok dopóki dojdzie do wstawienia rekordu do bazy danych. Mianowicie rekord poprawnie sie wstawia do bazy. Po dodaniu powinna sie odpalic strona dziekujemy o treści OK natomiast odpala sie w ten sposób żę na stronie wczytuje zawartość i szblony dziekuje jak i błąd. Wiecie dlaczego ? Dlaczego wchodzi do catch (sfException $e) {} skoro wyjątek nie wystąpił ?
-=Peter=-
A nie lepiej wykorzystać przekierowanie za pomocą redirect? Teraz gdy odświeżysz, to prawdopodobnie drugi raz nastąpi rejestracja...

  1. <?php
  2. $this->redirect('rejestracja/dziekujemy');
  3. ?>


Pozatym wykorzystaj możliwości formularzy do tworzenia obiektów modelu i zapisania ich do bazy danych.
Ustaw w formularzu jakiś przedrostek dla nazwy pola za pomocą $this->widgetSchema->setFormatName() (nie jestem pewnien czy ta metoda się tak nazywa tongue.gif) i dziedzicz swój formularz po formularzu propelowym/doctrine, wtedy kod Twojej metody skróci się o ponad połowę.
Gribo
zmieniłem na redirect ale dalej zamiast przenosic mnie do dziekujemy to przenosi do BŁĄD mimo że rekord do bazy się dodał ?
destroyerr
No to jeszcze napisz jaki dostajesz wyjątek.
-=Peter=-
Przechwytuj nie sfException tylko sfDatabaseException, aby wyłapać wyjątek związany tylko z bazy danych...
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.