私は symfony2 を初めて使用し、フォームを理解するのは非常に困難です。
このトピックは以前にも取り上げましたが、主に関係の側面に関係しています。フォームと関係の保存を管理する方法に問題があります。シナリオは、ユーザーにはユーザーである多くの友人がいます。したがって、多対多の関係を参照する自己参照です。
私は FOSUser Bundle を使用しており、友情エンティティを持っています。エンティティを作成するための YAML は次のとおりです。
MH\FriendshipBundle\Entity\Friendship:
type: entity
table: mh_friendship
repositoryClass: MH\FriendshipBundle\Entity\FriendshipRepository
id:
id:
type: integer
generator:
strategy: AUTO
fields:
requested_at:
type: datetime
gedmo:
timestampable:
on: create
is_accepted:
type: boolean
nullable: true
accepted_at:
type: datetime
nullable: true
manyToOne:
user:
targetEntity: MH\UserBundle\Entity\User
inversedBy: user_friends
joinColumn:
name: user_id
referencedColumnName: id
friend:
targetEntity: MH\UserBundle\Entity\User
inversedBy: friend_users
joinColumn:
name: friend_id
referencedColumnName: id
lifecycleCallbacks:
prePersist: [ ]
postPersist: [ ]
preUpdate: [ ]
postUpdate: [ ]
MH\UserBundle\Entity\User:
type: entity
table: mh_user
repositoryClass: MH\UserBundle\Entity\UserRepository
id:
id:
type: integer
generator:
strategy: AUTO
fields:
first_name:
type: string
length: 100
nullable: true
last_name:
type: string
length: 100
nullable: true
created_at:
type: datetime
gedmo:
timestampable:
on: create
updated_at:
type: datetime
gedmo:
timestampable:
on: update
oneToMany:
user_friends:
targetEntity: MH\FriendshipBundle\Entity\Friendship
mappedBy: user
cascade: ["persist", "remove"]
friend_users:
targetEntity: MH\FriendshipBundle\Entity\Friendship
mappedBy: friend
cascade: ["persist", "remove"]
friend_groups:
targetEntity: MH\FriendshipBundle\Entity\FriendGroup
mappedBy: owner
cascade: ["persist", "remove"]
lifecycleCallbacks:
prePersist: [ ]
postPersist: [ ]
preUpdate: [ ]
postUpdate: [ ]
これで、Friendship リソースから crud ジェネレーターを介して作成されたフォームができました。これが私がやっていることです。
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('friend', 'entity', array(
'class' => 'UserBundle:User',
'property' => 'fullName',
'expanded' => true,
'multiple' => true,
'required' => false,
))
;
}
「友達」として選択して保存できるユーザーのチェックボックスのリストをレンダリングします。
私の問題は次のとおりです。
- 保存時に次のエラーが表示されます。
PHP Catchable 致命的エラー: MH\FriendshipBundle\Entity\Friendship::setFriend() に渡される引数 1 は、MH\UserBundle\Entity\User のインスタンスである必要があります。Doctrine\Common\Collections\ArrayCollection のインスタンスが指定され、/Users/ で呼び出されます。 mohammedhamad/Sites/sociabills/vendor/symfony/symfony/src/Symfony/Component/PropertyAccess/PropertyAccessor.php 行 345 および /Users/mohammedhamad/Sites/sociabills/src/MH/FriendshipBundle/Entity/Friendship.php で定義155 行目、リファラー: http://sociabills.local/friends/new
選択された「友達」がコレクションを期待する setFriends メソッドに渡され、User オブジェクトを期待する setUser メソッドに渡されることを確認する方法がわかりません。
- ログインしているユーザーを除く、他のすべてのユーザーをリストするフォームを取得する方法。人に友達になってほしくない。