Symfony2 - FOS UserBundle - 使用下拉列表覆盖寄存器表单,其中包含来自数据库的数据

时间:2014-07-15 21:12:10

标签: fosuserbundle symfony-forms

我正在尝试使用symfony2构建一个非常简单的应用程序。

我已经使用HWI Oauth2安装和配置了FOS UserBundle。

它工作正常,但我想修改注册表单,以便它有一个下拉列表,其中包含来自我的数据库的数据,这些数据是由学说提取的。

我没有在Symfony doc上找到任何东西。

有人可以提出建议吗?

    public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('email', 'email', array('label' => 'form.email', 'translation_domain' => 'FOSUserBundle'))

        ->add('username', null, array('label' => 'form.username', 'translation_domain' => 'FOSUserBundle'))


         **/**** This Works and give a dropdownlist but i want to get this list from database instead of hard coded data how can I achieve that ? *****/** 
        ->add('status_type', 'choice', array(
        'choices' => array(
            '' => 'Please Select...',
            'developper' => 'Android Developper',
            'architect' => 'Android or Mobile Architect',
            'mobile' => 'Mobile Developper',
            'web and mobile' => 'Web and Mobile Developper',
        )))

        ->add('plainPassword', 'repeated', array(
            'attr' => array('class' => 'form-control'),
            'type' => 'password',
            'options' => array('translation_domain' => 'FOSUserBundle'),
            'first_options' => array('label' => 'form.password'),
            'second_options' => array('label' => 'form.password_confirmation'),
            'invalid_message' => 'fos_user.password.mismatch',
        ))
    ;
}

1 个答案:

答案 0 :(得分:1)

这是一个示例代码;

$builder->add('status_type', 'entity', array(
    'class' => 'AcmeDemoBundle:Status',
    'property' => 'status_name',
));

或者如果您需要自定义查询:(您需要调整架构的查询)

$builder->add('status_type',
              'entity',
               array(
                     'class'=>'AcmeDemoBundle:Status',
                     'property'=>'status_name',
                     'query_builder' => function ($repository)
                     {
                         return $repository->createQueryBuilder('s')
                                ->where('s.status_type = ?1')
                                ->setParameter(1, 'basic')
                                ->add('orderBy', 's.sort_order ASC');
                     }
                    )
              );

有关详细信息,请参阅http://symfony.com/it/doc/current/reference/forms/types/entity.html

上的相关文档