Symfony Form Builder选择框,包含有效日期列表

时间:2014-08-27 15:11:32

标签: php symfony formbuilder

我有一个简单的实体,有3个字段validFrom(date),validTo(date)和price(integer)。

现在我需要一个表单,其中validFrom是一个日期,但validTo应该是预定义日期的选择列表。为了预定这些日期,我还有一个模型类。

class WeekCollection {

private $weeks;

/**
 * @param \DateTime $weekDate
 */
public function addWeek(\DateTime $weekDate)
{
    $this->weeks[] = $weekDate;
}

/**
 * @param \DateTime $weekDate
 */
public function removeWeek(\DateTime $weekDate)
{
    $pos = array_search($weekDate, $this->weeks);
    unset($this->weeks[$pos]);
}

/**
 * @return array
 */
public function getWeeks()
{
    return $this->weeks;
}

} 

我的formbuilder看起来像这样:

public function buildForm(FormBuilderInterface $builder, array $options) 
{
  $builder
        ->add('validFrom','date', array(
            'label' => 'Valid From',
            'data' => $options['checkin_date'],
            'read_only' => true,
            'widget' => 'single_text'
        ))
        ->add('myWeeks','choice', array(
            'choices' => $this->getWeeksFromModel(),
            'property_path' => 'validTo'
        ))
}

private function getWeeksFromModel()
{
    $weeks = new WeekCollection();
    $weeks->addWeek(new \DateTime());
    $weeks->addWeek(...some more dates...);
    $weeks->addWeek(...some more dates...);

    return $weeks->getWeeks();
}

我收到错误:参数1传递给Symfony \ Component \ Form \ Extension \ Core \ ChoiceList \ SimpleChoiceList :: __ construct()必须是类型数组,给定对象

我理解这一点,但是如何将我的周集合用作输入选择(也应该映射到我的实体的validTo)?

1 个答案:

答案 0 :(得分:0)

Symfony想要一个像这样的关联数组:

$builder->add('myWeeks','choice', array(
        'choices' => array ('key1' => new \DateTime(),
                            'key2' => some other date,
                            'key3' => some other date)
        'property_path' => 'validTo'))

您必须以正确的方式修改方法getWeeksFromModel()。