如何处理表单选项
在这个例子中,我创建了一个用于注册新用户的表单。在传递给表单的选项中,我给出了用户可以拥有的不同角色。
使用已配置的数据类为我的表单创建可重用的类,并使用额外的选项填充选择字段以选择用户角色:
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
));