FosUser Как я могу добавить поле роли, если thegrant является ADMIN - PullRequest
0 голосов
/ 26 апреля 2018

Я хочу показать другое значение в поле ролей, если грантом является администратор и простой пользователь.

Пример, если грант - role_admin, который я увижу в полях ролей User и admin
если это role_user, у меня будет пользователь.

Я использую FOSuser, и это мой тип пользователя:

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder->add('name')
        ->add('surname')
        ->add('email')
        ->add('mobile')
        ->add('roles', ChoiceType::class, array(
            'choices' => array(
                'ADMIN' => 'ROLE_ADMIN',
                'SIMPLE USER' => 'ROLE_USER'),
            'multiple'=>true
        ));
}/**
 * {@inheritdoc}
 */

public function getParent()
{
    return BaseRegistrationFormType::class;
}

public function configureOptions(OptionsResolver $resolver)
{
    $resolver->setDefaults(array(
        'data_class' => 'AppBundle\Entity\User'
    ));
}

1 Ответ

0 голосов
/ 26 апреля 2018

Передать текущего пользователя как вариант вашей формы. Затем выполните итерацию по $user->getRoles(), чтобы сгенерировать свой выбор.

Например, вот так:

use AppBundle\Entity\User;
public function buildForm(FormBuilderInterface $builder, array $options)
{
    $user = $options['user'];
    $builder->add('name')
        ->add('surname')
        ->add('email')
        ->add('mobile');
    if($user instanceof User){
        $choices = [];
        foreach($user->getRoles() as $key => $role){
            /* Do your key transform process here */
            $choices[$key] = $role;
        }
        $builder->add('roles', ChoiceType::class, array(
            'choices' => $choices,
            'multiple'=>true
        ));
    }
}/**
 * {@inheritdoc}
 */

public function getParent()
{
    return BaseRegistrationFormType::class;
}

public function configureOptions(OptionsResolver $resolver)
{
    $resolver->setDefaults(array(
        'data_class' => 'AppBundle\Entity\User',
        'user'       => null
    ));
}

Затем передайте текущего пользователя при инициализации формы.

...