FosUser Как я могу добавить поле роли, если грант ADMIN

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

Например, если грант равен role_admin, я увижу в полях ролей User и admin
если это role_user, у меня будет juste User.

Я использую FOSuser, и это мой UserType:

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'
    ));
}
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Symfony Station Communiqué - 17 февраля 2023 г
Symfony Station Communiqué - 17 февраля 2023 г
Это коммюнике первоначально появилось на Symfony Station , вашем источнике передовых новостей Symfony, PHP и кибербезопасности.
Управление ответами api для исключений на Symfony с помощью KernelEvents
Управление ответами api для исключений на Symfony с помощью KernelEvents
Много раз при создании api нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
0
0
23
1

Ответы 1

Передайте текущего пользователя как вариант вашей формы. Затем переберите $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
    ));
}

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

Другие вопросы по теме