FOSUserBundle

首先,我是法国人,所以我请求你原谅我可怜的英语。

我来找你,因为我在这里,我开始了我的第一个Symfony3项目! 我遇到了第一个问题:我想使用FOSUserBundle来管理我的用户,但我不希望任何访问者能够注册。 我想要管理员创建用户(我认为我可以做到这一点),但我需要在用户创建表单中,管理员可以为用户分配一个角色。 (只有一个角色)

这是我的问题:Symfony3在这一点上发生了很大变化,我找到的解决方案不再匹配。 事实上,我想在FOSUserBundle的/ registration中添加一个字段CollectionType,并将此注册页面放在/ admin / registration下,以便管理员能够创建新用户。 我将更改注册重定向以使网站不认为管理员是使用该表单的访问者。 这是一个好主意吗? 那么,我需要有人简单地给我“ - >添加('角色')”的代码..“请:D。 因为它与Symfony2中使用的不同。

所以,我想要的是这样的:

    // FOSUserBundleFormTypeRegistrationFormType.php


$builder ->add('roles', CollectionType::class, array(
                'entry_type' => TextType::class,
                'entry_options' => array(
                    '/* CHOICES */' => array(
                        /*List of Roles from security.yml*/
                    )
                )
            );

感谢大家 !


你必须使用选择表单类型

在Symfony中获得角色的示例:

在你的控制器

// ... your function
$user = new User();
$roles = $this->container->getParameter('security.role_hierarchy.roles');
$myForm = $this->createForm(new UserType($roles), $user);

$builder->add('roles', 'choice', array(
        'choices' => $this->flattenArray($this->roles),
));

// ... your code

// transform symfony roles into one dimensional array.
public function array_flatten($array)
{
    if (!is_array($array)) {
        return FALSE;
    }
    $result = array();
    foreach ($array as $key => $value) {
        if (is_array($value)) {
            $result = array_merge($result, array_flatten($value));
        } else {
            $result[$key] = $value;
        }
    }
    return $result;
}
链接地址: http://www.djcxy.com/p/91693.html

上一篇: FOSUserBundle

下一篇: How can I change the data receiving format in a FosUserBundle form?