3

我想从用户那里选择一种问卷类型,所以我设置了一个包含问卷类型的选择。

类型是从实体加载的QuestionType

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

无法实现的是为结果选择设置默认值。

我用谷歌搜索了很多,但我只得到了只适用于数组的preferred_choice 解决方案

4

5 回答 5

4

我通过在控制器的 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 ),您可以使用属性,但如果您使用表单来编辑实体(不要创建一个新的)

于 2013-04-03T15:28:57.387 回答
2
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));
于 2013-04-03T00:46:52.177 回答
2

如果您使用实体结果来创建选择菜单,那么您可以使用preferred_choices

如文档中所述,首选选项将呈现在列表顶部,因此从技术上讲,第一个选项将是默认选项,前提是您不添加空值。

于 2013-04-03T08:40:58.927 回答
1

预先在模型中设置的公认答案是一个很好的答案。但是,我遇到过需要为类型中每个对象的某个字段设置默认值的情况collection。该集合启用了allow_addandallow_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
        ));
    }
}
于 2014-11-17T23:41:17.427 回答
0

在实体 ( ) 内的成员变量上设置默认值QuestionType,例如

/**
 * default the numOfCourses to 10
 *
 * @var integer
 */
private $numCourses = 10;
于 2015-10-28T17:56:41.697 回答