编辑具有角色的用户表单


Edit user form with roles

我正在尝试制作一个带有角色选择的新/编辑用户表单。我设法登录了,但我很难弄清楚如何让角色下拉列表起作用。(角色表有两个条目:ROLE_ADMIN和ROLE_USER)我的实体配置是:

Service'SafetyBundle'Entity'User:
    type: entity
    table: user
    repositoryClass: Service'SafetyBundle'Entity'UserRepository
    manyToMany:
       roles:
         targetEntity: Role
         joinTable:
           name: user_role
           joinColumns:
             user_id:
               referencedColumnName: id
           inverseJoinColumns:
             role_id:
               referencedColumnName: id
    fields:
        id:
            type: integer
            id: true
            generator:
                strategy: AUTO
        user_name:
            type: string
            length: '40'
        user_surname:
            type: string
            length: '40'
        password:
            type: integer
            length: '6'
        salt:
            type: string
            length: '32'
        user_created:
            type: datetime
            columnDefinition: TIMESTAMP DEFAULT CURRENT_TIMESTAMP
    lifecycleCallbacks: {  }
Service'SafetyBundle'Entity'Role:
    type: entity
    table: null
    repositoryClass: Service'SafetyBundle'Entity'RoleRepository
    fields:
        id:
            type: integer
            id: true
            generator:
                strategy: AUTO
        name:
            type: string
            length: '30'
    lifecycleCallbacks: {  }

我的用户(修剪)实体:

/**
     * Add roles
     *
     * @param 'Service'SafetyBundle'Entity'Role $roles
     * @return User
     */
    public function addRole('Service'SafetyBundle'Entity'Role $roles)
    {
        $this->roles[] = $roles;
        return $this;
    }
    /**
     * Remove roles
     *
     * @param 'Service'SafetyBundle'Entity'Role $roles
     */
    public function removeRole('Service'SafetyBundle'Entity'Role $roles)
    {
        $this->roles->removeElement($roles);
    }
    /**
     * Get roles
     *
     * @return 'Doctrine'Common'Collections'Collection 
     */
    public function getRoles()
    {
        return $this->roles->toArray();
    }
    public function getRolesForm()
    {
        return $this->roles;
    }
    public function setRolesForm($role)
    {
        return $this->roles[]=$role;
    }
     /**
     * @see 'Serializable::serialize()
     */
    public function serialize()
    {
        return serialize(array(
            $this->id,
        ));
    }
    /**
     * @see 'Serializable::unserialize()
     */
    public function unserialize($serialized)
    {
        list (
            $this->id,
        ) = unserialize($serialized);
    }
    public function eraseCredentials()
    {
    }

形式:

public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('user_name')
            ->add('user_surname')
            ->add('password')
            ->add('roles')
        ;
        $builder->add('save', 'submit');
    }

我已经尝试过角色表单,如其他线程所示:

 $builder
        ->add('user_name')
        ->add('user_surname')
        ->add('password')
        ->add('rolesForm')
    ;

但我只得到一个空的输入,搜索过,但找不出来。。。任何帮助都将被视为

角色是一个实体,因此可以使用实体字段类型。

    $builder
        ->add('user_name')
        ->add('user_surname')
        ->add('password')
        ->add('roles', 'entity', array(
            'class' => 'Service'SafetyBundle'Entity'Role',
            'property' => 'name',
        ));
    ;

这将把DB中所有可用的角色添加到字段中。您还可以将choices选项设置为类似$user->getRoles()的选项来使用该列表,或者使用QueryBuilder实例来筛选可用角色。