Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [Symfony][Symfony2]Brak pola w formularzu, Przypisanie null do entity gdy w request nie ma zmiennej
Fluke
post
Post #1





Grupa: Zarejestrowani
Postów: 247
Pomógł: 9
Dołączył: 20.09.2010
Skąd: Kraków

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


Witam,

Mam mały problem z zapisywaniem danych z formularza.
Mam 3 pola w formularzu: firstname, middlename, lastname:
  1. public function buildForm(FormBuilderInterface $builder, array $options) {
  2. $builder->add('firstname', 'text')
  3. ->add('middlename', 'text')
  4. ->add('lastname', 'text');
  5. }


W widoku generuję sobie tylko 2 np: firstname i lastname. Ale wcześniej w polu middlename została przypisana dana. Gdy nie wyrendreuje pola formularza, to do bazy zostanie przesłany null. Jak uniknąć przypisania tej zmiennej jeśli nie została wysłana w request ?

W skrócie chodzi mi o to, że jak w request nie ma pola 'middlename' to na obiekcie entity nie wywołuje metody np: setMiddlename($middlename);

Może wydać się głupie trochę to pytanie ale wcześniej korzystałem z Zend i tam działało bez zarzutów.

Pozdrawiam

Albo, czy może jest jakaś funkcjonalność do formularza, która pozwala sprawdzić czy dane są prawidłowe ? Jak w Zend była metoda isValid(array $data).
Go to the top of the page
+Quote Post
skowron-line
post
Post #2





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

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


Jest nawet cały dział poświęcony validacji
http://symfony.com/doc/current/book/validation.html
Jeżeli nie chcesz wyświetlić w formularzu pola a co za tym idzie nie chcesz aby było zmienione w bazie użyj form eventow i usun pole.
Go to the top of the page
+Quote Post
Fluke
post
Post #3





Grupa: Zarejestrowani
Postów: 247
Pomógł: 9
Dołączył: 20.09.2010
Skąd: Kraków

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


Dzięki za odpowiedź, muszę się przyjrzeć tym form event`s bo szczerze mówiąc pierwszy raz o tym słyszę (IMG:style_emoticons/default/tongue.gif)

Ale dalej mam problem z danymi.

Jak w tym event`cie sprawdzić jakie dane zostały przesłane a w jakim stanie był obiekt ?
Go to the top of the page
+Quote Post
Crozin
post
Post #4





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

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


  1. ...
  2. public function buildForm(FormBuilder $builder, array $options) {
  3.  
  4. }
  5. ...
1. Dane początkowe (ustawione przy tworzeniu formularza) masz dostępne pod $builder->getData().
2. Jeżeli potrzebujesz dostać się do danych "wysłanych" przez użytkownika w tej metodzie możesz podpiąć się pod zdarzenie FormEvents::PRE_SET_DATA:
  1. $builder->addEventListener(FormEvents::PRE_SET_DATA, function(FormEvent $e) {
  2. if (...) {
  3. $e->getForm()->add(...);
  4. }
  5. });
3. http://symfony.com/doc/current/cookbook/fo...dification.html

Przy czym powyższy scenariusz powinieneś użyć jedynie w przypadku dynamicznych formularzy. Jeżeli już na etapie jego tworzenia wiesz, że nie będziesz potrzebować pola middleName po prostu dodaj dla tego formularz opcję useMiddleName i zareaguj odpowiednio już na etapie początkowego budowania formularza:
  1. public function buildForm(FormBuilder $builder, array $options) {
  2. ...
  3.  
  4. if ($options['useMiddleName']) {
  5. $builder->add('middlename', ...);
  6. }
  7.  
  8. ...
  9. }


Ten post edytował Crozin 28.04.2014, 15:32:45
Go to the top of the page
+Quote Post
skowron-line
post
Post #5





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

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


Masz ten sam formularz w 2 miejscach (IMG:style_emoticons/default/questionmark.gif) Ze w jednym wyswietlasz 2 pola a w innym 3 (IMG:style_emoticons/default/questionmark.gif) ?
Go to the top of the page
+Quote Post
Fluke
post
Post #6





Grupa: Zarejestrowani
Postów: 247
Pomógł: 9
Dołączył: 20.09.2010
Skąd: Kraków

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


A wszystko to po to aby uniknąć nadpisywania danych, które nie podaliśmy np odwołując się przez AJAX.

Np: mamy tablicę: {firstname: 'MyName'} i żeby nie nadpisywał zmienne [lastname, firstname] dając NULL.

W builderze mam formularz z 3 polami,

W widoku np wyświetlam wszystkie 3 pola i jest git. Ale gdy za pomocą AJAX wyślę tylko 1 to żeby pozostałe dane nie zostały naruszone.
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: 4.10.2025 - 07:52