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:
$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
return array ('form' => $form->createView(), ...
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
{
public function buildForm
(FormBuilderInterface
$builder, array $options) {
$builder
->add('opis')
->add('start','hidden')
->add('kategoria','hidden',array('data_class'=>'Moj\WlasnyBundle\Entity\Kategorie')) ->add('klient', new KlientType())
;
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array( '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?
Ten post edytował Barton 16.04.2013, 14:18:13