如何處理表單選項
在這個例子中,我建立了一個用於註冊新使用者的表單。在傳遞給表單的選項中,我給出了使用者可以擁有的不同角色。
使用已配置的資料類為我的表單建立可重用的類,並使用額外的選項填充選擇欄位以選擇使用者角色:
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
));