如何处理表单选项

在这个例子中,我创建了一个用于注册新用户的表单。在传递给表单的选项中,我给出了用户可以拥有的不同角色。

使用已配置的数据类为我的表单创建可重用的类,并使用额外的选项填充选择字段以选择用户角色:

class UserType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('firstName', TextType::class, array(
                'label' => 'First name'
            ))
            ->add('lastName', TextType::class, array(
                'label' => 'Last name'
            ))
            ->add('email', EmailType::class, array(
                'label' => 'Email'
            ))
            ->add('role', ChoiceType::class, array(
                'label' => 'Userrole',
                'choices' => $options['rolechoices']
            ))
            ->add('plain_password', RepeatedType::class, array(
                'type' => PasswordType::class,
                'first_options' => array('label' => 'Password'),
                'second_options' => array('label' => 'Repeat password')
            ))
            ->add('submit', SubmitType::class, array(
                'label' => 'Register user'
            ));
    }

    public function configureOptions(OptionsResolver $optionsResolver)
    {
        $optionsResolver->setDefaults(array(
            'data_class' => 'WebsiteBundle\Entity\User',
            'rolechoices' => array()
        ));
    }
}

如你所见,名为 roleChoises 的表单中添加了一个默认选项。创建此选项并在方法中传递以创建表单对象。见下一个代码。

在我的控制器中创建表单对象:

$user = new User();
$roles = array(
    'Admin' => User::ADMIN_ROLE,
    'User' => User::USER_ROLE
);
$form = $this->createForm(UserType::class, $user, array(
    'rolechoices' => $roles
));