Symfony3 - FOSUserBundle - 角色归属
Symfony3 - FOSUserBundle - Roles attribution
首先,我是法国人,请原谅我糟糕的英语。
我来找你是因为我在这里,我正在开始我的第一个 Symfony3 项目!我遇到了第一个问题:我想使用 FOSUserBundle 来管理我的用户,但我不希望任何访问者能够注册。我希望管理员创建用户(我想我可以做到),但我需要在用户创建表单中,管理员可以为用户分配角色。 (只有一个角色)
这是我的问题:Symfony3 在这一点上发生了很大变化,我发现的解决方案不再匹配。事实上,我想在 FOSUserBundle 的 /registration 中添加一个 CollectionType 字段,并将此注册页面放在 /admin/registration 下,以便管理员能够创建新用户。我将更改注册重定向,使网站不会认为管理员是使用该表单的访问者。这是一个好主意吗?好吧,我需要有人简单地给我“->add('role')”的代码 .. 请 :D。因为它与 Symfony2 中使用的完全不同。
所以,我想要的是:
// \FOS\UserBundle\Form\Type\RegistrationFormType.php
$builder ->add('roles', CollectionType::class, array(
'entry_type' => TextType::class,
'entry_options' => array(
'/* CHOICES */' => array(
/*List of Roles from security.yml*/
)
)
);
谢谢大家!
你必须使用choices form type
在 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;
}
首先,我是法国人,请原谅我糟糕的英语。
我来找你是因为我在这里,我正在开始我的第一个 Symfony3 项目!我遇到了第一个问题:我想使用 FOSUserBundle 来管理我的用户,但我不希望任何访问者能够注册。我希望管理员创建用户(我想我可以做到),但我需要在用户创建表单中,管理员可以为用户分配角色。 (只有一个角色)
这是我的问题:Symfony3 在这一点上发生了很大变化,我发现的解决方案不再匹配。事实上,我想在 FOSUserBundle 的 /registration 中添加一个 CollectionType 字段,并将此注册页面放在 /admin/registration 下,以便管理员能够创建新用户。我将更改注册重定向,使网站不会认为管理员是使用该表单的访问者。这是一个好主意吗?好吧,我需要有人简单地给我“->add('role')”的代码 .. 请 :D。因为它与 Symfony2 中使用的完全不同。
所以,我想要的是:
// \FOS\UserBundle\Form\Type\RegistrationFormType.php
$builder ->add('roles', CollectionType::class, array(
'entry_type' => TextType::class,
'entry_options' => array(
'/* CHOICES */' => array(
/*List of Roles from security.yml*/
)
)
);
谢谢大家!
你必须使用choices form type
在 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;
}