1

我正在制作一个带有选择列表的表格。这是我的 FormType 的内容(仅作为测试):

$builder->add('regionUser');
$builder->add('roles' ,'choice' ,array('choices' => array(
        "ROLE_ADMIN" => "ROLE_ADMIN",
            "ROLE_USER" => "ROLE_USER",
        ),
        'required'  => true,
        'multiple' => false,
));

当我执行此操作时,我收到以下错误:

给定“标量”、“数组”类型的预期参数

出了什么问题?如何解决?

4

1 回答 1

2

有3个解决方案:

  1. 使用多项选择字段来显示角色字段。多项选择返回一个数组。

  2. 在您的表单中,不要显示“角色”字段。仅在您的构建表单中放置一个新字段“角色”,而不是在您的实体中。(如果需要,您可以使用角色层次结构自动填充它)。在 onSuccess 方法中,获取“角色”来为您的用户设置角色。

$user->addRole($role);

  1. 创建用户类时,不要使用 FOSUserBundle 中的 UserInterface。复制它并更改方法的原型。

// FOSUserBundle/用户接口

函数setRoles(数组$角色);

// YourUserBundle/UserInterface 
function setRoles($roles); 

并更改您的用户类中的方法

// FOSUserBundle/UserInterface 
public function setRoles(array $roles) 
{ 
        $this->roles = array(); 
        foreach ($roles as $role) { 
            $this->addRole($role); 
        } 
} 

// YourUserBundle/UserInterface 
public function setRoles($roles) 
{ 
        if (is_string()) { 
            $this->addRole($roles); 
        } else { 
            $this->roles = array(); 
            foreach ($roles as $role) { 
                $this->addRole($role); 
            } 
        } 
}

您可以在此处找到更多信息:https ://groups.google.com/group/symfony2/browse_thread/thread/3dd0d26bcaae4f82/4e091567abe764f9

http://blog.aelius.fr/blog/2011/11/allow-user-to-choose-role-at-registration-in-symfony2-fosuserbundle-2/

https://github.com/FriendsOfSymfony/FOSUserBundle

于 2012-06-29T17:14:56.050 回答