Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Symfony][Symfony2]Brak pola w formularzu
Forum PHP.pl > Forum > PHP > Frameworki
Fluke
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).
skowron-line
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.
Fluke
Dzięki za odpowiedź, muszę się przyjrzeć tym form event`s bo szczerze mówiąc pierwszy raz o tym słyszę 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 ?
Crozin
  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. }
skowron-line
Masz ten sam formularz w 2 miejscach questionmark.gif Ze w jednym wyswietlasz 2 pola a w innym 3 questionmark.gif?
Fluke
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.
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.