我有一个时间段功能,用户必须能够编辑每个插槽的开头和结尾。
所以我想创建一个包含alle时隙的表单。我在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';
}
}
有什么想法? 提前谢谢!
答案 0 :(得分:3)
将数组而不是实体传递给表单。表单可以处理得很好。
$timeslots = $this->getDoctrine()->getRepository("ScheduleBundle:Timeslot")->findAll();
$formData = array('timeslots' => $timeslots);
$timeslots_form = $this->createFormBuilder($formData) ...