Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [Symfony2][Symfony]Problem z formularzem, przekazywanie obiektu
Barton
post
Post #1





Grupa: Zarejestrowani
Postów: 70
Pomógł: 2
Dołączył: 26.10.2008

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


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?

Ten post edytował Barton 16.04.2013, 14:18:13
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Barton
post
Post #3





Grupa: Zarejestrowani
Postów: 70
Pomógł: 2
Dołączył: 26.10.2008

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


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.

Ten post edytował Barton 16.04.2013, 15:23:31
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.08.2025 - 07:00