将角色字段添加到 FOSUserBundle 组表单
Posted
技术标签:
【中文标题】将角色字段添加到 FOSUserBundle 组表单【英文标题】:Add roles field to FOSUserBundle group form 【发布时间】:2015-02-10 18:52:25 【问题描述】:在 FOSUserBundle 中激活组(基于其documentation)时,组角色不会嵌入到编辑和更新表单中!我已经覆盖了 GroupFormType 和 GroupController 但我无法将角色从控制器传递到表单类。 我的问题是如何将角色添加到表单以让管理员更改或将角色分配给组?
【问题讨论】:
【参考方案1】:通过添加角色字段来覆盖 GroupController 来解决我的问题
public function editAction(Request $request, $groupName)
...
/** @var $formFactory \FOS\UserBundle\Form\Factory\FactoryInterface */
$formFactory = $this->get('fos_user.group.form.factory');
$form = $formFactory->createForm();
$form->add('roles', 'choice', array(
'choices' => $this->getExistingRoles(),
'data' => $group->getRoles(),
'label' => 'Roles',
'expanded' => true,
'multiple' => true,
'mapped' => true,
));
...
public function getExistingRoles()
$roleHierarchy = $this->container->getParameter('security.role_hierarchy.roles');
$roles = array_keys($roleHierarchy);
foreach ($roles as $role)
$theRoles[$role] = $role;
return $theRoles;
【讨论】:
$group var 怎么样?【参考方案2】:就我而言,我决定取消 GroupFormType 类。这是继承的类:
namespace UserBundle\Form;
use FOS\UserBundle\Form\Type\GroupFormType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\FormBuilderInterface;
class GroupType extends AbstractType
/**
* @inheritdoc
*/
public function buildForm(FormBuilderInterface $builder, array $options)
$permissions = array(
'Utilisateur' => 'ROLE_USER',
'Administrateur' => 'ROLE_ADMIN'
);
$builder
->add('name', null, array('label' => 'form.group_name', 'translation_domain' => 'FOSUserBundle'))
->add('role', ChoiceType::class, array(
'label' => 'Rôle',
'choices' => $permissions,
'multiple' => true,
'expanded' => true
))
;
public function getParent()
return GroupFormType::class;
别忘了在 config.yml 中精确说明你的新类
fos_user:
group:
form:
type: UserBundle\Form\GroupType
【讨论】:
以上是关于将角色字段添加到 FOSUserBundle 组表单的主要内容,如果未能解决你的问题,请参考以下文章
在使用 FOSUserBundle 进行用户注册期间添加默认角色
带有 FOSUserBundle 的 Symfony2 - 如何向我的应用程序添加没有层次结构的角色