Symfony3 как хранить роли пользователя в базе данных

Версия Symfony: 3.1.3 База данных: MySQL

У меня есть таблица users, и у нее есть столбец в качестве ролей (LongText-DC2Type: array).

В моем контроллере я создал раскрывающийся список для формы, как ниже,

$user = new Users; $form = $this->createFormBuilder($user) // some other fields ->add('roles', ChoiceType::class, array( 'attr' => array( 'class' => 'form-control', 'style' => 'margin:5px 0;'), 'choices' => array( 'Teacher' => true, 'Student' => true, 'Parent' => true ), ) ) // some other fields ->getForm(); 

и затем я получаю выбранную роль пользователя ниже (внутри одного контроллера)

 if( $form->isSubmitted() && $form->isValid() ){ // some other codes $role = $form['roles']->getData(); // some other codes if( $role == 0 ){ $userRole = array ('teacher'); } elseif( $role == 1 ){ $userRole = array ('student'); } elseif( $role == 2 ){ $userRole = array ('parent'); } $user->addRole($userRole); $em = $this->getDoctrine()->getManager(); $em->persist($user); $em->flush(); } 

Но это дает мне следующую ошибку,

 Expected argument of type "array", "boolean" given 

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

Вот что я сделал, чтобы избавиться от проблемы,

Определите роли в файле /app/config/security.yml, как показано ниже,

 role_hierarchy: ROLE_ADMIN: [ROLE_ADMIN] ROLE_SUPER_ADMIN: [ROLE_SUPER_ADMIN, ROLE_ALLOWED_TO_SWITCH] ROLE_TEACHER: [ROLE_TEACHER] ROLE_STUDENT: [ROLE_STUDENT] ROLE_PARENT: [ROLE_PARENT] 

в Контроллере, получите роли из /app/config/security.yml, используя следующий код

$roles = $this->getParameter('security.role_hierarchy.roles');

и это код для ролей в форме,

 $roles = $this->getParent('security.role_hierarchy.roles'); 

а затем в виде формы (здесь это multi select)

 ->add('roles', ChoiceType::class, array( 'attr' => array('class' => 'form-control', 'style' => 'margin:5px 0;'), 'choices' => array ( 'ROLE_ADMIN' => array ( 'Yes' => 'ROLE_ADMIN', ), 'ROLE_TEACHER' => array ( 'Yes' => 'ROLE_TEACHER' ), 'ROLE_STUDENT' => array ( 'Yes' => 'ROLE_STUDENT' ), 'ROLE_PARENT' => array ( 'Yes' => 'ROLE_PARENT' ), ) , 'multiple' => true, 'required' => true, ) ) 

Изменить роли пользователя должны быть определены в файле /app/config/security.yml, как показано ниже.

 role_hierarchy: ROLE_ADMIN: [ROLE_ADMIN] ROLE_SUPER_ADMIN: [ROLE_SUPER_ADMIN, ROLE_ALLOWED_TO_SWITCH] ROLE_TEACHER: [ROLE_TEACHER] ROLE_STUDENT: [ROLE_STUDENT] ROLE_PARENT: [ROLE_PARENT] 

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

 'choices' => array( 'Teacher' => ['teacher'], 'Student' => ['student'], 'Parent' => ['parent'], ) 

EDIT # 2

Я посмотрел на свой собственный код, и я дал вам неправильную информацию. Измените его на следующее. Обратите внимание, что способ, которым вы получаете роль из формы, неверен, используйте приведенное ниже решение. Я уверен, что это сработает для вас.

 ->add('roles', ChoiceType::class, array( 'attr' => array( 'class' => 'form-control', 'style' => 'margin:5px 0;'), 'choices' => array( 'Teacher' => 0, 'Student' => 1, 'Parent' => 2, ), )) if( $form->isSubmitted() && $form->isValid() ){ // some other codes $role = $form->get('roles')->getData(); ... 

@dragoste сделал правильное заявление в том, что перед публикацией вопроса вы должны сначала попытаться устранить неполадки. Также вы можете искать онлайн ответы. Существует множество примеров Symfony.