У меня есть функция Timeslot, где пользователь должен иметь возможность редактировать начало и конец каждого слота.
Поэтому я хотел бы создать одну форму, содержащую все временные интервалы. Я основывал свой код на этой статье в symfony docs: http://symfony.com/doc/current/cookbook/form/form_collections.html Проблема заключается в том, что в этой статье есть какой-то родительский объект, для которого экземпляры коллекции должны назначить. В моем случае временные интервалы являются автономными и не имеют отношения к другому объекту (который на данном этапе является релевантным).
Итак .. мой вопрос: как мне создать коллекцию форм с моими временными интервалами?
controller.php
/** * @Route("/settings", name="settings") * @Template() */ public function settingsAction() { $timeslots = $this->getDoctrine()->getRepository("ScheduleBundle:Timeslot")->findAll(); $timeslots_form = $this->createFormBuilder() ->add('timeslots', 'collection', array( 'type' => new TimeslotType(), )) ->add('save', 'submit') ->getForm(); return array( 'timeslots' => $timeslots_form->createView() ); }
TimeslotType.php:
class TimeslotType extends AbstractType { /** * @param FormBuilderInterface $builder * @param array $options */ public function buildForm(FormBuilderInterface $builder, array $options) { $builder ->add('start', 'time', array( 'input' => 'datetime', 'widget' => 'choice', )) ->add('end', 'time', array( 'input' => 'datetime', 'widget' => 'choice', )) ; } /** * @param OptionsResolverInterface $resolver */ public function setDefaultOptions(OptionsResolverInterface $resolver) { $resolver->setDefaults(array( 'data_class' => 'Oggi\ScheduleBundle\Entity\Timeslot' )); } /** * @return string */ public function getName() { return 'timeslot'; } }
Есть предположения? заранее спасибо!
Передайте массив вместо объекта в вашу форму. Форма может обрабатываться либо просто отлично.
$timeslots = $this->getDoctrine()->getRepository("ScheduleBundle:Timeslot")->findAll(); $formData = array('timeslots' => $timeslots); $timeslots_form = $this->createFormBuilder($formData) ...