在Symfony中只有一个角色的用户

时间:2016-04-11 23:27:03

标签: php arrays symfony roles

我有一个具有getRoles方法的User实体。但是,为了使这项工作,getRoles()需要返回一个数组,如:

class User implements UserInterface {
    ...
    public function getRoles()
    {
        return array($this->roles);
    }
    ...
}

当我尝试创建表单来创建新用户时,问题出现了。这是因为每个用户应该只有一个角色,因此,我创建了一个这样的字段:

class UserType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
    ...
        ->add('roles', ChoiceType::class, array(
              'choices' => array(
                  'Role 1' => 'ROLE_ONE',
                  'Role 2' => 'ROLE_TWO',
                  'Role 3' => 'ROLE_THREE',
                  'Role 4' => 'ROLE_FOUR'
                  ),
              'label' => 'Role')
        )
        ...

但是当我尝试渲染它时,它会抛出错误:“注意:数组到字符串转换”,这是因为使用ChoiceType,我只能选择一个选项。使用选项

修复了此问题
'multiple' => true

但是这允许选择多个选项(它不是我想要的)。

我尝试只返回角色,而不是数组:

class User implements UserInterface {
    ...
    public function getRoles()
    {
        return $this->roles;
    }
    ...
}

有了这个,表单现在可以正常工作,但是登录停止工作并告诉我下一个:

  

捕获致命错误:传递给Symfony \ Component \ Security \ Core \ Authentication \ Token \ UsernamePasswordToken :: __ construct()的参数4必须是数组类型,给定字符串......

我的应用程序的逻辑是用户只有一个角色,我不需要一个数组,但我不知道如何告诉symfony(在登录时)“角色”只是一个( string)不多(数组)......

抱歉我的英文。

1 个答案:

答案 0 :(得分:0)

  

我的应用程序的逻辑是用户只有一个角色

UserInterface 需要一系列角色,因此,如果您希望用户只能拥有其中一个角色,则应在模型中反映该逻辑。

class User implements UserInterface
{
    protected $role;

    // ...

    public setRole($role)
    {
        if (!is_string($role)) {
            throw new \InvalidArgumentException('Invalid role');
        }

        $this->role = $role;
    }

    public function getRoles()
    {
        return array($this->role);
    }

    // ...
}

然后是

->add('role', ChoiceType::class, array(
      'choices' => array(
          'Role 1' => 'ROLE_ONE',
          'Role 2' => 'ROLE_TWO',
          'Role 3' => 'ROLE_THREE',
          'Role 4' => 'ROLE_FOUR'
      ),
      'label' => 'Role'
))

非常好,因为setRole需要一个字符串,而getRoles只是换行并返回该接口所需的那个值的数组。