2017-02-14 7 views
1

https://github.com/ZF-Commons/zfc-rbacを私のモジュールに実装しようとしています。私は次の例外を取得するので、私は、こだわっている現時点では:ユーザー\エンティティ\ユーザーに渡さzendフレームワーク3のselectフォーム要素からDoctrine Collectionを取得する

引数1を:: setRoles()インタフェース教義\共通\コレクション\コレクション、配列を指定してを実装する必要があります... UserManagerクラスでエラーが発生し

ライン、:$user->setRoles($data['role']);

だから、それは明らかだ、エンティティのそのセッターは$data['role']要素を返すSELECTタイプの間違ったか、フォーム要素です。セッターの

コード:ユーザーフォームでのselect要素の

public function setRoles(Collection $roles) 
{ 
    $this->roles->clear(); 
    foreach ($roles as $role) { 
     $this->roles[] = $role; 
    } 
} 

コード:

$this->add([    
     'type' => 'DoctrineModule\Form\Element\ObjectSelect', 
     'name' => 'role', 
     'attributes' => [ 
      'multiple' => true, 
     ], 
     'options' => [ 
      'object_manager' => $this->entityManager, 
      'target_class' => 'User\Entity\Role', 
      'label' => 'Role', 
      'value_options' => $roles, 
      'disable_inarray_validator' => true, //TODO: create validator 
      'required' => true, 
     ], 
    ]); 

それでは、どのように杖は、私はselect要素が教義\共通\コレクション\コレクションを返す作りますか?

Doctrine名前空間からArrayCollectionを使用しようとしましたが、動作しませんでした。 Collectionインタフェースを実装する別のクラスを作成し、それをselect要素で使用する必要がありますか?あるいは、これを達成するためのより便利な方法がいくつかありますか?

私はまた、取り外した@varでエンティティで@param注釈や種類を試してみましたが、この場合には、私がメッセージ次持っている:タイプの

期待値「教義\共通\コレクション\コレクション|配列 "、関連フィールド" User \ Entity \ User#$ roles "、代わりに"文字列 "を取得しました。

答えて

0

私の問題の解決策が見つかりました。 Userエンティティでセッターは、私はちょうどRoleオブジェクトの配列に選択入力からの配列を変換すること、小さなヘルパー関数を作成する必要がありましたが正しいです:

private function getRolesFromArray($array){ 
    $roles = $this->entityManager->getRepository(Role::class) 
      ->findBy(['id'=> $array]); 
    return new ArrayCollection($roles); 
} 

ので、ArrayCollectionの作品! Formオブジェクトに適切な選択フィールドがあります。

$this->add([    
     'type' => 'DoctrineModule\Form\Element\ObjectSelect', 
     'name' => 'role', 
     'attributes' => [ 
      'multiple' => true, 
     ], 
     'options' => [ 
      'object_manager' => $this->entityManager, 
      'target_class' => 'User\Entity\Role', 
      'label' => 'Role', 
      'required' => true, 
     ], 
    ]); 
関連する問題