我是 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: [ ]
现在我有一个通过友谊资源中的 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/socialbills/src/MH/FriendshipBundle/Entity/Friendship.php 中定义第 155 行,推荐人:http://socialbills.local/friends/new
不确定如何确保将选择的“朋友”传递给需要集合的 setFriends 方法,而不是需要用户对象的 setUser 方法。
- 如何让表单列出所有其他用户,登录用户除外。不希望一个人成为自己的朋友。