Symfony и FOSUserBundle: 3 разных профиля, в зависимости от роли


У меня есть Пользователь класс

# User
- id
- username
- password
- email

И три разные роли с разными полями профиля :

# 1. Teacher 
- teachingSince
- aboutMe
- classes

# 2. Pupil
- class
- parents
- dateOfBirth
- grade

3. Parent
- children
- phoneNumber

В другом сообщении был рекомендован pugxmultiuserbundle.

Я хотел бы использовать FOSUserBundle для достижения этой цели. Кто-нибудь знает, как я могу определить различные профили по ролям?

Заранее спасибо!

Author: Community, 2016-05-05

1 answers

Для этого будет много способов.

Простейший

Класс сущности пользователя содержит все поля, у вас есть базовый тип формы для пользователя, который содержит только общие поля для всех трех "ролей", затем расширьте их для каждой роли, добавив необходимые поля.

Тип базовой формы

class UserType extends AbstractType {

  public function buildForm( FormBuilderInterface $builder, array $options ) {
      $builder->add('username', TextType::class, []);
      // etc etc
  }

  // ...
}

Учитель

class TeacherType extends UserType {

  public function buildForm( FormBuilderInterface $builder, array $options ) {
      parent::buildForm($builder, $options);

      $builder->add('teaching', DateType::class, []);
      // etc etc
  }

  // ...
}

Сложный путь (я бы, наверное, пошел этим путем)

Используйте сопоставленный суперкласс User, расширьте его для каждой "роли". Этот потребуется некоторое внимание со стороны аутентификации (используйте Охрану ). Но поскольку я страстно ненавижу FOSUserBundle, я, вероятно, пристрастен к этому решению.

 2
Author: DevDonkey, 2016-05-05 08:47:31