Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Symfony][Symfony2] Walidacja formularzy
Forum PHP.pl > Forum > PHP > Frameworki
peter13135
  1. if($request->getMethod() == 'POST')//wysłany formularz
  2. {
  3. $form->bindRequest($request);
  4.  
  5. $this->validate($form, $formFieldDefinitions);
  6. if($form->isValid())//formularz jest prawidłowy
  7. {
  8. //wysyłam formularz do bazy
  9. }
  10. }



  1. private function validate($form, $formFieldDefinitions)
  2. {
  3. $formData = $form->getData();
  4. forach(pola as pole)//w tej pętli sprawdzam czy pole jest nieprawidłowe. Jeśli tak, to dodaje błąd.
  5. {
  6. $field = $form->get(tutaj nazwa pola);
  7. if(pole nieprawidłowe)
  8. {
  9. $error = new FormError("nazwa błędu",array());
  10. $field->addError($error) ;
  11. }
  12. }
  13. }


To oczywiście tylko kluczone fragmenty kodu.

To działa zarąbiście, sam sobie waliduje i dodaje błędy do formularza i te błędy się wyświetlają.
Ale dodałem sobie sobie pole integer i jeśli jest ono błędnie wypełnione, to pokazuje "This value is not valid". Skąd się bierze ten błąd ? Ja mam swoją walidację i nie korzystam z żadnej innej, a tu symfony nadgorliwie mi go waliduje. Ja chciałbym mieć swój błąd "wpisana wartość nie jest liczbą całkowitą", albo coś takiego. Problem w tym, że wtedy metoda addError nie działa (nie mogę dodać swojego błędu) i wyświetla się tylko ten standardowy błąd This value is not valid

Czy da się wyrzucić tą walidacje ?
misi3kk
Nie miałem niestety czasu dokładnie tego sprawdzić, ale wydaje mi się, że wywołanie na form metody isValid() automatycznie uruchamia walidację budowaną w Sf2.

Tłumaczenie tekstu możesz zmienić w domenie "validators"
Crozin
1. Dlaczego nie korzystasz z wbudowanego mechanizmu walidacji danych, w sposób w jaki został on pierwotnie zaprojektowany? Kontroler to nie miejsce na sprawdzanie poprawności danych.
2. Wygląda na to jakbyś miał podpięte jakieś validation constraints (nie wiem jak to przetłumaczyć) czy to przez adnotacje czy osobny plik XML/YAML/PHP.
peter13135
1. A co to jest ten "wbudowany mechanizm walidacji danych" ? Formularz jest generowany na podstawie danych w bazie. Każde pole może mieć rózne opcje, przez co muszę każde pole walidować stosując różne reguły (te reguły są zapisane w bazie danych), więc kombinuję w taki sposób. Jeśli są lepsze sposoby, no cóż... robię tak jak potrafię, a jeśli robię źlę, proszę o wskazanie prawidłowego rozwiązania smile.gif
2. Cóż.. niczego takiego nie dodawałem.

Myślę teraz jak zmienić po prostu ten tekst błędu. Znalazłem to : http://stackoverflow.com/questions/8988133...ges-in-symfony2
przekopiowałem ten plik validation, oraz w konfiguracji dałem :
Cytat
default_locale: pl

ale nic się nie zmieniło.
BugsBunny
Cytat(peter13135 @ 20.09.2012, 10:45:00 ) *
  1. if($request->getMethod() == 'POST')//wysłany formularz
  2. {
  3. $form->bindRequest($request);
  4.  
  5. $this->validate($form, $formFieldDefinitions);
  6. if($form->isValid())//formularz jest prawidłowy
  7. {
  8. //wysyłam formularz do bazy
  9. }
  10. }



  1. private function validate($form, $formFieldDefinitions)
  2. {
  3. $formData = $form->getData();
  4. forach(pola as pole)//w tej pętli sprawdzam czy pole jest nieprawidłowe. Jeśli tak, to dodaje błąd.
  5. {
  6. $field = $form->get(tutaj nazwa pola);
  7. if(pole nieprawidłowe)
  8. {
  9. $error = new FormError("nazwa błędu",array());
  10. $field->addError($error) ;
  11. }
  12. }
  13. }


To oczywiście tylko kluczone fragmenty kodu.

To działa zarąbiście, sam sobie waliduje i dodaje błędy do formularza i te błędy się wyświetlają.
Ale dodałem sobie sobie pole integer i jeśli jest ono błędnie wypełnione, to pokazuje "This value is not valid". Skąd się bierze ten błąd ? Ja mam swoją walidację i nie korzystam z żadnej innej, a tu symfony nadgorliwie mi go waliduje. Ja chciałbym mieć swój błąd "wpisana wartość nie jest liczbą całkowitą", albo coś takiego. Problem w tym, że wtedy metoda addError nie działa (nie mogę dodać swojego błędu) i wyświetla się tylko ten standardowy błąd This value is not valid

Czy da się wyrzucić tą walidacje ?


To działa zarąbiście, sam sobie waliduje i dodaje błędy do formularza i te błędy się wyświetlają

Do zarąbistości jeszcze tutaj daleko. Pisanie reguał walidacji w kontrolerze to droga do nikąd. To samo możesz uzyskać przez zdefiniowanie reguł w modelu.
Najprawdopodobniej isValid uruchamia walidator i sprawdza jakie masz zdefiniowane typy danych w modelu, a potem porównuje je z wartościami podanymi w formularzu. Jak potrzebujesz zrobić coś lepszego to w modelu dopisz odpowiednie reguły nad polami. Jak będziesz potrzebował czegoś jeszcze bardziej wyrafinowanego to polecam lekturę tworzenia formularzy w symfony2.
peter13135
Cytat
Najprawdopodobniej isValid uruchamia walidator i sprawdza jakie masz zdefiniowane typy danych w modelu, a potem porównuje je z wartościami podanymi w formularzu. Jak potrzebujesz zrobić coś lepszego to w modelu dopisz odpowiednie reguły nad polami.

Ale do tego formularza nie ma modelu. Jest to "dynamiczny formularz" jego pola są zapisane w bazie danych.

Poradziłem sobie poprzez translację komunikatów, natomiast wasza pomoc pewnie jeszcze kiedyś mi się przyda.
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.