Установить значение по умолчанию поля выбора Symfony FormType

Я хочу от пользователя выбрать тип вопросника, поэтому я устанавливаю выбор, содержащий типы вопросников.

Типы загружаются из объекта QuestionType .

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

То, чего не удается достичь, – установить значение по умолчанию для выбранного select.

Я много googled, но у меня есть только preferred_choice решение, которое работает только с массивами

Я сделал это, установив тип в 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 )); } 

Вы можете использовать атрибут data если у вас есть постоянное значение по умолчанию ( http://symfony.com/doc/current/reference/forms/types/form.html ), но оно не будет полезно, если вы используете форму для редактирования объекта (не создавать новую)

Если вы используете результаты сущности для создания меню выбора, вы можете использовать preferred_choices .

Предпочтительный выбор (ы) будет отображаться в верхней части списка, как он говорит в документах, и поэтому первый будет технически по умолчанию, если вы не добавите пустое значение.

 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') ; } 

В контроллере

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

Принятый ответ установки в модели заранее хороший. Однако у меня была ситуация, когда мне понадобилось значение по умолчанию для определенного поля каждого объекта в типе collection . В коллекции есть allow_add и allow_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 )); } } 

Задайте значение по умолчанию для переменной-члена внутри вашего объекта ( QuestionType ), например

 /** * default the numOfCourses to 10 * * @var integer */ private $numCourses = 10;