2013-04-03 3 views
1

사용자가 설문지 유형을 선택해야하므로 설문지 유형이 포함 된 select를 설정합니다.선택 필드의 기본값을 설정하십시오. Symfony FormType

유형은 엔티티 에서로드됩니다.

$builder 
     ->add('questionType', 'entity', array(
       'class' => 'QuizmooQuestionnaireBundle:QuestionType', 
       'property' => 'questionTypeName', 
       'multiple' => false, 
       'label' => 'Question Type')) 
     ->add('type', 'hidden') 
    ; 

달성 할 수없는 것은 결과 값에 기본값을 설정하는 것입니다.

나는 많이 봤했지만 내가 가지고에만 preferred_choice solution에만 배열 컨트롤러

$this->createForm(new MyFormType($foo)); 

답변

3

내 컨트롤러의 newAction에 유형을 설정하여 만들었습니다. 설정된 유형이 기본값으로 설정됩니다. 당신이 개체를 편집 할 양식을 사용하는 경우

public function newAction($id) 
{ 
    $entity = new RankingQuestion(); 

    //getting values form database 
    $em = $this->getDoctrine()->getManager(); 
    $type = $em->getRepository('QuizmooQuestionnaireBundle:QuestionType')->findBy(array('name'=>'Ranking Question')); 
    $entity->setQuestionType($type); // <- default value is set here 

    // Now in this form the default value for the select input will be 'Ranking Question' 
    $form = $this->createForm(new RankingQuestionType(), $entity); 

    return $this->render('QuizmooQuestionnaireBundle:RankingQuestion:new.html.twig', array(
     'entity' => $entity, 
     'form' => $form->createView(), 
     'id_questionnaire' =>$id 
    )); 
} 

1
class MyFormType extends AbstractType{ 

     public function __construct($foo){ 
      $this->foo = $foo; 
     } 


     $builder 
      ->add('questionType', 'entity', array(
        'class' => 'QuizmooQuestionnaireBundle:QuestionType', 
        'property' => 'questionTypeName', 
        'multiple' => false, 
        'label' => 'Question Type' 

        'data' => $this->foo)) 

      ->add('type', 'hidden') 
     ; 
} 

당신이 다음 선택 메뉴를 수행 할 수 있습니다 만들 엔티티 결과를 사용하는 경우와 함께 작동하는 preferred_choices을 사용하십시오.

선호하는 선택 사항은 문서에 나와있는대로 목록의 맨 위에 렌더링되므로 공백 값을 추가하지 않으면 첫 번째가 기술적으로 기본값이됩니다.

+0

덕분에, 문제는 '푸'나는 답을 갱신하여 데이터베이스 – zizoujab

+1

을 형성 와야한다는 것입니다, 그러나 당신의 솔루션을 갈 수있는 더 좋은 방법처럼 보인다. –

2

에서

+0

당신이 더 많은 설명을 해주실 수 있겠습니까? 제가 언급했듯이 이미 선호하는 선택 사항을 보았지만 아무 것도 얻지 못했기 때문입니다 – zizoujab

+0

선호하는 선택의 가치 또는 표시되는 텍스트를 넣고 있습니까? 내가 볼 수있는 것으로부터 ID라면 도움이 될 것입니다. – qooplmao

1

(새로 만들 수 없습니다) 당신이 일정한 기본값 (http://symfony.com/doc/current/reference/forms/types/form.html) 이있는 경우 data 속성을 사용할 수 있지만 도움이 될 실 거예요 모델에 미리 허용 된 대답은 좋은 것입니다. 그러나 나는 collection 유형의 각 객체의 특정 필드에 대한 기본값이 필요한 상황이있었습니다. 컬렉션에 allow_addallow_remove 옵션이 활성화되어 있으므로 클라이언트에서 요청할 개체의 수를 모르기 때문에 컬렉션의 값을 미리 인스턴스화 할 수 없습니다. 그래서 같은 원하는 기본 객체의 기본 키와 empty_data 옵션을 사용 :

class MyChildType 
extends AbstractType 
{ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder->add('optionalField', 'entity', array(
      'class' => 'MyBundle:MyEntity', 
      // Symfony appears to convert this ID into the entity correctly! 
      'empty_data' => MyEntity::DEFAULT_ID, 
      'required' => false, 
     )); 
    } 
} 

class MyParentType 
extends AbstractType 
{ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder->add('children', 'collection', array(
      'type' => new MyChildType(), 
      'allow_add' => true 
      'allow_delete' => true, 
      'prototype' => true, // client can add as many as it wants 
     )); 
    } 
} 
0

이 당신의 엔티티 (QuestionType), 예를 들어, 내부의 멤버 변수에 디폴트 값을 설정합니다 답에 대한

/** 
* default the numOfCourses to 10 
* 
* @var integer 
*/ 
private $numCourses = 10; 
관련 문제