我有一个简单的实体,包含3个字段validFrom(日期)、validTo(日期)和price(整数)。
现在我需要一个表单,其中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;
}
}
我的表单生成器是这样的:
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();
}
我收到错误:传递给Symfony''Component''Form''Extension''Core''ChoiceList''SimpleChoiceList::__construct()的参数1必须是数组类型,对象给定
我理解这一点,但我如何使用我的周集合作为输入选择(也应该映射到我的实体的validTo)?
Symfony想要这样的关联数组:
$builder->add('myWeeks','choice', array(
'choices' => array ('key1' => new 'DateTime(),
'key2' => some other date,
'key3' => some other date)
'property_path' => 'validTo'))
您必须以正确的方式修改方法getWeeksFromModel()。