Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [Symfony][Symfony2] Walidacja formularzy
peter13135
post
Post #1





Grupa: Zarejestrowani
Postów: 1 447
Pomógł: 191
Dołączył: 26.03.2008

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


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





Grupa: Zarejestrowani
Postów: 26
Pomógł: 4
Dołączył: 14.05.2010

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


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"
Go to the top of the page
+Quote Post
Crozin
post
Post #3





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


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





Grupa: Zarejestrowani
Postów: 1 447
Pomógł: 191
Dołączył: 26.03.2008

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


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 (IMG:style_emoticons/default/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.

Ten post edytował peter13135 20.09.2012, 12:11:27
Go to the top of the page
+Quote Post
Crozin
post
Post #5





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


1. http://symfony.com/doc/current/book/validation.html
2. http://symfony.com/doc/current/cookbook/va...constraint.html
Go to the top of the page
+Quote Post
BugsBunny
post
Post #6





Grupa: Zarejestrowani
Postów: 206
Pomógł: 4
Dołączył: 2.04.2005

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


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





Grupa: Zarejestrowani
Postów: 1 447
Pomógł: 191
Dołączył: 26.03.2008

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


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.

Ten post edytował peter13135 24.09.2012, 09:17:20
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.08.2025 - 12:55