2015-02-10 4 views
1

При активации группы (base на ее documentation) в FOSUserBundle ролевые группы не встроены в форму редактирования и обновления! Я уже переопределяю GroupFormType и GroupController, но я не могу передавать роли от контроллера до класс формы. мой вопрос: как я могу добавить роли в форму, чтобы администратор мог изменять или назначать роли группам?Добавить поле ролей в группу FOSUserBundle

ответ

4

Решая свою проблему, добавив поле роли переопределить 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; 
} 
+0

у вас есть полный рабочий пример для этого, пожалуйста? – user3174311

0

Со своей стороны я решил inerite класса 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 
Смежные вопросы