Ik wil graag een formulier maken waarin checkboxen toegevoegd/bewerkt/verwijderd kunnen worden en ook nog eens op willekeurige volgorde gezet kunnen worden Met Symfony's "formbuilder" en JQueryUI Sortable. Deze checkbox-collectie wordt dan later in een ander formulier voor de eindgebruiker geplaatst. zoiets dus
Ik heb een Entity genaamd FlexOption. Deze Entity staat zeg maar voor één checkbox.
Daarna heb ik rechtstreeks in mijn Controller een Form aangemaakt met slechts één formType namelijk het type collection. Rechtstreeks in de controller omdat ik geen Entity nodig heb. Ik weet even niet zo goed te verwoorden waarom ik die niet nodig heb.. maar het komt er op neer dat er slechts één lijst met FlexOptions zal bestaan er hoeft dus geen one-to-many in de database te komen.
De controller:
<?php
public function indexAction(Request $request)
{
$em = $this->getDoctrine()->getManager();
$entities = $em->getRepository('MainBundle:FlexOption')->findAll();
$defaultData = array();
$form = $this->createFormBuilder($defaultData)
->add('options', 'collection', array(
'type' => new \MainBundle\Form\FlexOptionType(),
'allow_add' => true,
'allow_delete' => true,
'by_reference' => false,
'data' => $entities,
))
->add('Verzenden', 'submit')
->getForm();
if ($request->isMethod('POST')) {
$form->bind($request);
if ($form->isValid()) {
print_r($form->getData());
exit;
}
}
return array(
'form' => $form->createView(),
);
}
?>
Na het verzenden en Validatie haal ik de gegevens op met $form->getData(). Het resultaat is een array als hieronder:
Array
(
[options] => Array
(
[0] => MainBundle\Entity\FlexOption Object
(
[id:MainBundle\Entity\FlexOption:private] => 3
[label:MainBundle\Entity\FlexOption:private] => test
[sequence:MainBundle\Entity\FlexOption:private] => 0
[deleted:MainBundle\Entity\FlexOption:private] =>
)
[1] => MainBundle\Entity\FlexOption Object
(
[id:MainBundle\Entity\FlexOption:private] => 1
[label:MainBundle\Entity\FlexOption:private] => Film / Fotografie
[sequence:MainBundle\Entity\FlexOption:private] => 1
[deleted:MainBundle\Entity\FlexOption:private] =>
)
)
)
Nu Moet ik deze array dus weer in (een ArrayCollection van) FlexOption objecten zien te zetten.
Ik vermoed dat ik Serializer->denormalize() aan de slag moet?
Wie kan mij een duwtje in de goede richting geven?
Alvast bedankt,
Frank