Mam pewien problem z tworzeniem i zapisywaniem formularza w Symfony. Zacznijmy od tego że z pewnej akcji przekierowuję się do innej przekazując dane:
$response = $this->forward('MojWlasnyBundle:Zlecenia:wyswietlDostepneTerminy', array('terminy' => $terminy, 'dzien' => $dataTime, 'kategoria' => $kategoria));
W kontrolerze 'MojWlasnyBundle:Zlecenia:wyswietlDostepneTerminy' tworzę formularz:
$zlecenie = new Zlecenia(); $form = $this->createForm(new ZleceniaAddType(), $zlecenie); $form->getData()->setKategoria($kategoria); // tutaj binduję pod to pole odpowiedni obiekt Kategoria pobrany z poprzedniego kontrolera
Metoda dodająca encję z formularza wygląda oczywiście tak:
public function noweZlecenieAction(Request $request) { $entity = new Zlecenia(); $form = $this->createForm(new ZleceniaAddType(), $entity); $form->bind($request); if ($form->isValid()) { $em = $this->getDoctrine()->getManager(); $em->persist($entity); $em->flush(); }
A klasa formularza wygląda tak:
class ZleceniaAddType extends AbstractType { { $builder ->add('opis') ->add('start','hidden') ->add('klient', new KlientType()) ; } public function setDefaultOptions(OptionsResolverInterface $resolver) { 'data_class' => 'Moj\WlasnyBundle\Entity\Zlecenia', 'cascade_validation' => true, )); } public function getName() { return 'moj_wlasnybundle_zleceniatypeadd'; } }
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.
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?