Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [symfony] edycja danych, formularz, walidacja i sfPropelUniqueValidator
Forum PHP.pl > Forum > PHP > Frameworki
AxZx
witam

przy rejestracji nowego profilu przydaje sie sfPropelUniqueValidator w pliku validation/rejestracja.yml
sfPropelUniqueValidator sprawdza czy podany login/email jest juz w bazie danych.
elegancko to sprawdza i wyrzuca blad gdy login zajety.

ale jak uzyc sfPropelUniqueValidator w walidacji formularza edycji danych profilu?
w sytuacji gdy uzytkownik zmieni tylko jedno pole (nie login) w formularzy i zatwierdzi zmiane walidator zwroci blad: taki login jest zajety. oczywiscie ze jest zajety bo to jego login jest juz w bazie i powinna byc mozliwosc zapisania (bo zmienil inne pola).

zapomnialem o jakims parametrze w validation/edytuj.yml ? albo gdziekolwiek indziej?

pozdrawiam
destroyerr
A przesyłasz w requescie, primary key profilu?
AxZx
tak to robie:
  1. <?php
  2. public function handleErrorEdytuj()
  3. {
  4.  
  5. $this->profil = $this->getProfil();
  6. $this->getRequest()->setParameter('idprofil', $this->profil->getIdprofil());
  7. return sfView::SUCCESS;
  8. }
  9.  
  10. public function executeEdytuj()
  11. {
  12.  
  13. $profil = $this->getProfil();
  14. $this->forward404Unless($profil, 'Brak użytkownika');
  15.  
  16. $this->profil = $profil;
  17.  
  18. }
  19. ?>
mike
Hmm, nie o to chodzi. Z kodu, który pokazałeś nie wynika czy wysyłasz te dane.
Chodzi o to by podczas żądania edycji (na przykład w GET) pojawił się identyfikator rekordu.

Więc jeśli edytujesz użytkownika to powinieneś w requeście przesłać klucz o nazwie id (jeśli tak jest w modelu) i wartości identyfikatora tego użytkownika.
AxZx
a to :
  1. <?php
  2. $this->getRequest()->setParameter('idprofil', $this->profil->getIdprofil());
  3. ?>

w metodzie handleErrorEdytuj()?

widocznie to jest zbedne kombinowanie. wstawilem w input_hidden_tag ten id profilu i wyglada ze dziala:)

dzieki, pozdrawiam
mike
Cytat(AxZx @ 8.05.2008, 16:08:40 ) *
a to : (...) w metodzie handleErrorEdytuj()?
To już po ptokach. Funkcja ta jest wywoływana po to by obsłużyć błąd, czyli za późno bo błąd już wyskoczył. A sęk był w tym żeby zapobiec jego wystąpieniu.
AxZx
czyli w ktorej metodzie to ma byc? (tak na przyszlosc jakbym chcial to robic w ten sposob)
w handleEdytuj() ?
no albo sie wogole tak nie da bo sprawdzanie jest wykonywane przed wywolaniem metody w kontrolerzE?
mike
Cytat(AxZx @ 8.05.2008, 16:25:35 ) *
no albo sie wogole tak nie da bo sprawdzanie jest wykonywane przed wywolaniem metody w kontrolerzE?
Dokładnie. Sprawdzanie (validacja) jest wykonywana zanim nastąpi wykonanie akcji. Rzecz, o której mowa nie nie musisz umieszczać w żadnej akcji. Chodzi o to by była przesłana w żądaniu. I tu chyba nie za bardzo biegasz o co chodzi.

Masz formularz zmiany danych. Zawiera on jakieś tak dane, między innymi login. I te dane wysyłasz do akcji i one właśnie lądują w żądaniu. Sęk w tym, co już poprawiłeś, że żądanie (czyli dane, które wysyłasz) muszą zawierać identyfikator obiektu.
Rozwiązanie, które zastosowałeś (czyli umieszczenie id w zestawie danych do przesłania) jest jak najbardziej poprawne i właśnie o to chodziło.
Ewentualnie mogłeś jeszcze na przykład dorzucić to id URLa: http://adres.pl/editUser?id=10 Tak też by było dobrze.
AxZx
dziekuje bardzo za obszerna odpowiedz:))
pozdrawiam
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.