2015-11-04 21 views
4

我试图创建一个控制器在那里我可以编辑用户(只是,没有别的),我的卡王的角色编辑用户角色。如何创建形式FriendsOfSymfony UserBundle

我创建了一个表单类型:

public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $builder 
     ->add(
      'roles', 'choice', [ 
       'choices' => ['ROLE_ADMIN', 'ROLE_USER', 'ROLE_CUSTOMER'], 
       'expanded' => true, 
       'multiple' => true, 
      ] 
     ) 
     ->add('send', 'submit'); 
} 

首先,这将是检索作用的最佳方式?有什么办法可以将标签与他们联系起来吗?

在控制器我有这样的:我有

/** 
    * User role edition 
    * 
    * @Route(
    *  path="/edit-roles", 
    *  name = "backoffice_user_edit_roles", 
    *  requirements = { 
    *   "id_user" = "\d*", 
    *  }, 
    *  methods = {"GET"} 
    *) 
    * 
    * @Security("has_role('ROLE_ADMIN')") 
    * 
    * @Template 
    */ 
    public function editRolesAction($id_user) 
    { 
     $user = $this->user_repository->findOneById($id_user); 
     $form = $this->form_factory->create('dirital_user_roles_form_type', $user); 
     return [ 
      'form' => $form->createView(), 
      'user' => $user 
     ]; 
    } 

问题:

  • 形式不得到与当前用户角色填充,我应该怎么办呢?
  • 当接收的形式,我怎么能更新用户?

非常感谢

+0

如果你的用户有一个逗号分隔的角色集,那么你需要一个插件数据转换(http://symfony.com/doc/current/cookbook/form/data_transformers.html)的角色转换,并从一个阵列。 – Cerad

+0

@Cerad其序列化,所以当你调用getRoles返回一个数组,这不应该是一个问题:) – petekaner

+0

很公平,你的选择阵列需要被键入:http://symfony.com/doc/current/reference/forms /types/choice.html#choices – Cerad

回答

6

实际上它比我想象的要简单 - 这是形式:

public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $builder 
     ->add(
      'roles', 'choice', [ 
       'choices' => ['ROLE_ADMIN' => 'ROLE_ADMIN', 'ROLE_USER' => 'ROLE_USER', 'ROLE_CUSTOMER' => 'ROLE_CUSTOMER'], 
       'expanded' => true, 
       'multiple' => true, 
      ] 
     ) 
     ->add('save', 'submit', ['label' => 'ui.button.save']); 
} 

而且控制器:

public function editRolesAction(Request $request, $id_user) 
{ 
    $user = $this->user_repository->findOneById($id_user); 
    $form = $this->form_factory->create('dirital_user_roles_form_type', $user); 
    $form->handleRequest($request); 
    if($form->isValid()) 
    { 
     $this->addFlash('success', 'section.backoffice.users.edit_roles.confirmation'); 
     $this->em->persist($user); 
     $this->em->flush(); 
     $this->redirectToRoute('backoffice_user_edit_roles', ['id_user' => $user->getId()]); 
    } 
    return [ 
     'form' => $form->createView(), 
     'user' => $user 
    ]; 
} 

的唯一部分仍然do是从配置中抓取表单选项而不是硬编码它们。

+0

在窗体上我得到这个错误: '注意:数组字符串转换' 参考问题:http://stackoverflow.com/questions/39198846/symfony3-how-to- store-user-roles-in-database/39232274?noredirect = 1#comment65843460_39232274 对发生了什么有什么想法? – inckka