Версия 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.