Wpis z mikrobloga

#php #symfony #symfony2

Wytłumaczy mi ktoś w jaki sposób zrobić w formularzu tak, żeby dwa pola odpowiadały jednej property z entity?

Wiem, że chyba trzeba stworzyć swój typ dla Form Field i pewnie Data Transformer ale za cholerę nie mogę tego zebrać do kupy :/
  • 24
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@MacDada: Np mam property w entity:
$costam powiedzmy zawiera string "abc:def"
chce zeby formularz wyswietlał to w dwóch polach p1 z zawartością "abc" i p2 z zawartością "def".
I odwrotnie, po submit formularza p1 i p2 powinno sie składać w jeden string do property "costam".
  • Odpowiedz
@gajowy_marucha Na pewno będą to zawsze dwa pola (a nie np dowolna liczba pól)?

W głównym formularzu operujesz na swoim modelu, czyli chcesz mieć „jedno pole formularza”, ale chcesz to renderować jako „dwa pola” – więc musisz utworzyć sobie nowy Type, który będzie miał dwa pola tekstowe i który użyjesz w formularzu głównym:
http://symfony.com/doc/current/cookbook/form/create_custom_field_type.html

Zapewne
  • Odpowiedz
Po prostu zrób dodatkowe settery i gettery dla tych "pseudopól".


@Damian1998: To też jest opcja, ale @gajowy_marucha pytał jak dostosować formularz do modelu – można sobie model psuć, bo fw nie wyrabia, ale to już oddzielna kwestia. Napisałem jak dostosować framework pod model, a nie odwrotnie.
  • Odpowiedz
@MacDada: Masz rację, że to modyfikacja modelu. Ale czepianie się o takie rzeczy i robienie wszystkiego naokoło to jednak strata czasu i sztuka dla sztuki. Szczególnie, że te wartości oddzielone dwukropkiem pewnie i tak muszą być rozdzielane jeszcze w innych miejscach.
  • Odpowiedz
@Damian1998: Myślałem o tym, jest to jakaś opcja.
Zawsze będą dwa pola, chodzi mi o date i time składane do datetime. Wiem że to już jest ale ja chcę renderować to inaczej, w osobnych divach no i każde ze swoimi atrybutami data-*. Z tego co wiem tego z istniejącym datetime nie da się zrobić?
  • Odpowiedz
@MacDada: Tak, w modelu mam pola DateTime, w formularzu mam datepicker (text + foundation datepicker) oraz time (text z custom validatorem abide) wszystko dziala ale w bazie chcę mieć jedno pole datetime a nie dwa date i time, ten typ datetime z symfony nadaje się idealnie, ale muszę to renderować i walidować na swój sposób.
Jutro spróbuję jeszcze raz to wykorzystać. A jak nie to set i get może będzie
  • Odpowiedz
@MacDada: generalnie renderuję każde pole osobno do grid z divów. Muszę łatwo móc zmieniać atrybuty tych divów (żeby dopasować do layout) poza tym muszę ustawiać inne atrybuty dla pola time i inne dla date bo mam własne walidatory porównujące z innymi polami np.
Na pewno da się to zrobić porządnie:)
  • Odpowiedz
@MacDada: mmm nie mam bo to w robocie, ale mniej wiecej tak (inputy mają więcej atrybutów):

Atrybuty kontenerów mogą się też zmieniać, poza tym inputy mogą mieć inne atrybuty w zależności od formularza.
  • Odpowiedz
@gajowy_marucha: https://gist.github.com/MacDada/5592c8c25b1a694b071f

Oczywiście, w zależności co faktycznie chcesz mieć „po swojemu”, to nadpisujesz.
W result.html jest więcej DIVów niż u Ciebie, ale nie powinno to przeszkadzać. A jak przeszkadza to możesz jeszcze bardziej nadpisać domyślne wyświetlanie.

Zauważ, że nadpisując widget, wykorzystuję symfonowe bloki – jak chcesz możesz olać i całkowicie mieć
  • Odpowiedz