Я использую FOSUserBundle и я пытаюсь настроить форму регистрации пользователя с возможностью is_admin. Я не понимаю, почему значение опции не передается из функции createForm()
функции функции buildForm()
.Symfony2 Форма Вариант Разрешение
Ниже приведен соответствующий код в контроллере:
$has_admin_rights = $this->get('security.authorization_checker')
->isGranted('ROLE_SUPER_ADMIN');
/** @var $formFactory \FOS\UserBundle\Form\Factory\FactoryInterface */
$formFactory = $this->get('fos_user.registration.form.factory');
/** @var $userManager \FOS\UserBundle\Model\UserManagerInterface */
$userManager = $this->get('fos_user.user_manager');
$user = $userManager->createUser();
...
$form = $formFactory->createForm(
new RegistrationFormType(), $user, array('is_admin' => $has_admin_rights));
Ниже пользовательский класс формы, который должен, в теории, решить is_admin вариант. Однако похоже, что опция не передана должным образом.
class RegistrationFormType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
if($options['is_admin'] === true)
{
$builder->add('uniqueRole', 'choice', array(
'choices' => array('ROLE_ADMIN' => 'user.role.admin',
'ROLE_TEACHER' => 'user.role.teacher',
'ROLE_STUDENT' => 'user.role.student'),
'label' => 'form.label.role',
'expanded' => false,
'multiple' => false,
'mapped' => false
));
$builder->remove('plainPassword')->add('plainPassword', 'hidden', array('data' => 'defaultPwd'));
} else {
// Default value is indeed set,
// and options[is_admin] always equals to false
if (array_key_exists("is_admin", $options)){
echo 'Set!';
} else {
echo 'Not Set!';
}
}
$builder->add('save', 'submit', array('label' => 'actions.add'));
}
protected function configureOptions(OptionsResolver $resolver)
{
$resolver->setRequired(array(
'is_admin'));
$resolver->setDefaults(array(
'is_admin' => false,
'data_class' => 'VMB\UserBundle\Entity\User',
'intention' => 'registration',
));
}
// BC for SF < 2.7
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$this->configureOptions($resolver);
}
public function getParent()
{
return 'fos_user_registration';
}
public function getName()
{
return 'vmb_user_registration';
}
}
Я также попытался передать параметр в конструктор такого образом
$form = $formFactory->createForm(new RegistrationFormType($has_admin_rights), $user);
однако Symfony2 AppCache инициализирует объект формы без надлежащего значения пар (который возвращается к определенным null
умолчанию стоимость). Что я делаю неправильно?
мне любопытно ... '$ formFactory' на самом деле, какой типа? Я не могу найти метод с именем 'createForm' в' FormFactory', 'FormFactoryBuilder' или' FormFactoryInterface'. –