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
我认为我的做法是错误的,并且想知道将角色插入数据库的正确方法。
答案 0 :(得分:1)
以下是我解决问题的方法,
在/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]
在Controller中,使用以下代码从/app/config/security.yml获取角色
$roles = $this->getParameter('security.role_hierarchy.roles');
这是formtype中的角色代码,
$roles = $this->getParent('security.role_hierarchy.roles');
然后在formtype中,(这里是多选)
->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]
答案 1 :(得分:0)
如果用户只能拥有一个角色,您的角色值可能会直接作为数组选择中的键。
'choices' => array(
'Teacher' => ['teacher'],
'Student' => ['student'],
'Parent' => ['parent'],
)
答案 2 :(得分:0)
编辑#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例子可供使用。