Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Symfony2][Symfony]Problem z formularzem, przekazywanie obiektu
Forum PHP.pl > Forum > PHP > Frameworki
Barton
Witam,

Mam pewien problem z tworzeniem i zapisywaniem formularza w Symfony. Zacznijmy od tego że z pewnej akcji przekierowuję się do innej przekazując dane:

  1. $response = $this->forward('MojWlasnyBundle:Zlecenia:wyswietlDostepneTerminy', array('terminy' => $terminy, 'dzien' => $dataTime, 'kategoria' => $kategoria));


W kontrolerze 'MojWlasnyBundle:Zlecenia:wyswietlDostepneTerminy' tworzę formularz:

  1. $zlecenie = new Zlecenia();
  2. $form = $this->createForm(new ZleceniaAddType(), $zlecenie);
  3.  
  4. $form->getData()->setKategoria($kategoria); // tutaj binduję pod to pole odpowiedni obiekt Kategoria pobrany z poprzedniego kontrolera
  5.  
  6. return array ('form' => $form->createView(), ...


Metoda dodająca encję z formularza wygląda oczywiście tak:

  1. public function noweZlecenieAction(Request $request) {
  2. $entity = new Zlecenia();
  3. $form = $this->createForm(new ZleceniaAddType(), $entity);
  4. $form->bind($request);
  5.  
  6. if ($form->isValid()) {
  7. $em = $this->getDoctrine()->getManager();
  8. $em->persist($entity);
  9. $em->flush();
  10. }


A klasa formularza wygląda tak:

  1. class ZleceniaAddType extends AbstractType
  2. {
  3. public function buildForm(FormBuilderInterface $builder, array $options)
  4. {
  5. $builder
  6. ->add('opis')
  7. ->add('start','hidden')
  8. ->add('kategoria','hidden',array('data_class'=>'Moj\WlasnyBundle\Entity\Kategorie'))
  9. ->add('klient', new KlientType())
  10. ;
  11. }
  12.  
  13. public function setDefaultOptions(OptionsResolverInterface $resolver)
  14. {
  15. $resolver->setDefaults(array(
  16. 'data_class' => 'Moj\WlasnyBundle\Entity\Zlecenia',
  17. 'cascade_validation' => true,
  18. ));
  19. }
  20.  
  21. public function getName()
  22. {
  23. return 'moj_wlasnybundle_zleceniatypeadd';
  24. }
  25. }


Ale przy próbie dodania encji z formularza otrzymuję błąd o tym że pole kategoria nie jest obiektem. Cały problem polega na tym że pole 'kategoria' jest polem relacji z inną tabelą a nie zwykłym polem tekstowym.

  1. Catchable Fatal Error: Argument 1 passed to Moj\WlasnyBundle\Entity\Zlecenia::setKategoria() must be an instance of Moj\WlasnyBundle\Entity\Kategorie, string given.


Co robię źle?
nospor
Zgodnie z komunikatem to tutaj:
$form->getData()->setKategoria($kategoria);
przekazujesz tekst a nie kategorie....

zrób
var_dump($kategoria);
przed tą linijką co pokazałem a sam się przekonasz
Barton
Problem rozwiązałem inaczej, zorientowałem się że pole kategoria w ogóle nie jest mi potrzebne, jedynie ustawiłem odpowiednie pole przed utworzeniem formularza:

  1. $zlecenie = new Zlecenia();
  2. $zlecenie->setKategoria($kategoria);
  3.  
  4. $form = $this->createForm(new ZleceniaAddType(), $zlecenie);


A nie, problem jednak nie został rozwiązany. Pomimo przypisania obiektów do pól, po odebraniu formularza pola te są puste...

$kategoria w tamtym miejscu jest obiektem.
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.