2014-08-27 1 views
0

나는 validfrom (날짜), validTo (날짜) 및 price (정수)의 세 필드가있는 간단한 엔티티가 있습니다.유효한 날짜 목록이있는 Symfony Formbuilder 선택 상자

이제 폼이 필요합니다. 여기서 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 \ ChoiceList \ SimpleChoiceList :: __ 구조()해야 타입 배열, 객체가 주어진다.

나는 그것을 이해하지만 입력 선택 (내 개체의 validTo에도 매핑되어야 함)로 주 컬렉션을 어떻게 사용할 수 있습니까?

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

당신이 올바른 방법으로 당신의 방법 getWeeksFromModel()를 수정 :

+0

왜 인스턴스화를 변환하고 배열에 'WeekCollection'을 추가 할 수 없습니까? 'WeekCollection'은 배열이 제공 할 수없는 것을 무엇을 제공합니까? – Bart

답변

0

심포니는이 같은 연관 배열이 원하는.