Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [symfony] edycja danych, formularz, walidacja i sfPropelUniqueValidator
AxZx
post
Post #1





Grupa: Zarejestrowani
Postów: 1 385
Pomógł: 55
Dołączył: 1.03.2005
Skąd: śląsk

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
destroyerr
post
Post #2





Grupa: Zarejestrowani
Postów: 879
Pomógł: 189
Dołączył: 14.06.2006
Skąd: Bytom

Ostrzeżenie: (0%)
-----


A przesyłasz w requescie, primary key profilu?
Go to the top of the page
+Quote Post
AxZx
post
Post #3





Grupa: Zarejestrowani
Postów: 1 385
Pomógł: 55
Dołączył: 1.03.2005
Skąd: śląsk

Ostrzeżenie: (0%)
-----


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. ?>
Go to the top of the page
+Quote Post
mike
post
Post #4





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
AxZx
post
Post #5





Grupa: Zarejestrowani
Postów: 1 385
Pomógł: 55
Dołączył: 1.03.2005
Skąd: śląsk

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
mike
post
Post #6





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
AxZx
post
Post #7





Grupa: Zarejestrowani
Postów: 1 385
Pomógł: 55
Dołączył: 1.03.2005
Skąd: śląsk

Ostrzeżenie: (0%)
-----


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?
Go to the top of the page
+Quote Post
mike
post
Post #8





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
AxZx
post
Post #9





Grupa: Zarejestrowani
Postów: 1 385
Pomógł: 55
Dołączył: 1.03.2005
Skąd: śląsk

Ostrzeżenie: (0%)
-----


dziekuje bardzo za obszerna odpowiedz:))
pozdrawiam
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.12.2025 - 21:56