0

ロールを選択して新規/編集ユーザー フォームを作成しようとしています。なんとかログインできましたが、役割のドロップダウンを機能させる方法を理解するのに苦労しています。(ロールテーブルには2つのエントリがあります: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');
    }

他のスレッドで示されているように、rolesForm を試してみました。

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

しかし、私は空の入力しか取得せず、検索しましたが、それを理解できません...どんな助けも高く評価されます

4

1 に答える 1

1

ロールはエンティティであるため、エンティティフィールド タイプを使用できます。

    $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 インスタンスを使用して利用可能なロールをフィルタリングしたりすることもできます。

于 2013-08-04T15:02:24.950 に答える