Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [SF2][Symfony] Formularz - kolekcja - defaultowa wartość
Forum PHP.pl > Forum > PHP > Frameworki
ziolo
Mam taką sytuację: User i Team. Relacja wiele do wielu. Zrobiona poprzez pośrednią encję Member. Team może zawierac wiele Memberów. User może być wielokrotnie Memberem różnych Teamów.

Chcę dodać nowy Team.

Mam formularz TeamType mający jako kolejcę Member:
  1. public function buildForm(FormBuilderInterface $builder, array $options)
  2. {
  3. $builder
  4. ->add('users', 'collection', array(
  5. 'type' => 'member_form', // - alias dla formularza Member.
  6. ))
  7. ;
  8. }


Formularz Member wyświetlający selecta z userami.
  1. public function buildForm(FormBuilderInterface $builder, array $options)
  2. {
  3. ->add('user', 'entity', array(
  4. 'class' => 'User'
  5. ))
  6. }



I teraz mam kontroler i chcę dodać Team z 4 Memberami. Z tym, że pierwszy domyślnie jest zalogowanym userem.

  1. $user = $this->container->get('security.context')->getToken()->getUser();
  2. $member1 = new Member();
  3. $member2 = new Member();
  4. $member3 = new Member();
  5. $member4 = new Member();
  6. $member1->setUser($user); // pierwszemu ustawiam defaultowego usera.
  7. $team = new Team();
  8. $team->addMember($member1);
  9. $team->addMember($member2);
  10. $team->addMember($member3);
  11. $team->addMember($member4);
  12. $form = $this->createForm(new TeamType(), $team);


I wyświetlam formularz, wszystko gra, lecz niestety w pierwszym selecie nie ma defaultowo aktualnego użytkownika. Nie mam pojęcia czemu :/
matiit
Co Ci zwraca getUser() z Encji member?

  1. $member1->setUser($user); // pierwszemu ustawiam defaultowego usera.
  2. $_us = $menber1->getUser();
  3. var_dump($_us);
ziolo
Dzięki. Wczoraj wieczorem udało mi się jednak rozwiązać problem.

Z kodem z poprzedniego posta oczywiście wszystko było ok.
Natomiast zupełnie nie potrzebnie pozostawiłem modelTransformer Encji do Id w formularzu MemberType.

Najpierw zastosowałem formularz "genemu_jqueryautocompleter_choice" - podtyp "choice" więc zastosowałem transformache encji to id.
Potem użyłem "genemu_jqueryautocompleter_entity" podtyp od "entity" i ten transformer stał się zbędny. Wszystko działało oprócz tego defaultowego ustawiania wartości w formularzu.

  1. $builder->get('user')->addModelTransformer(new EntityToIdTransformer($this->manager , 'AppBundle:User'));


Cały czas szedłem złym tropem, bo myślałem, że jakiejś opcji, ustawienia w typie "collection" mi brakuje :/
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.