如何處理表單選項

在這個例子中,我建立了一個用於註冊新使用者的表單。在傳遞給表單的選項中,我給出了使用者可以擁有的不同角色。

使用已配置的資料類為我的表單建立可重用的類,並使用額外的選項填充選擇欄位以選擇使用者角色:

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