我已在我的注册表单(FOSUserBundle)中实施了一个组选择。提交表单后,Symfony将错误地映射我的类型。 目标是通过注册表单将选定的组添加到用户。
这是我的用户实体:
class User extends BaseUser
{
protected $groups;
public function __construct()
{
parent::__construct();
$this->groups = new \Doctrine\Common\Collections\ArrayCollection();
}
public function addGroup(\FOS\UserBundle\Model\GroupInterface $groups)
{
$this->groups[] = $groups;
return $this;
}
public function removeGroup(\FOS\UserBundle\Model\GroupInterface $groups)
{
$this->groups->removeElement($groups);
}
public function getGroups()
{
return $this->groups;
}
}
以下是我的表单类型的相关部分。
$builder->add('groups', 'entity', array(
'label' => 'Type',
'required' => true,
'class' => 'xxUserBundle:Group',
'property' => 'name',
'query_builder' => function(EntityRepository $er) {
return $er->createQueryBuilder('g')->where('g.locked = false');
}
))
提交后,Symfony会抛出以下异常。
属性“group”和方法“setGroups()”之一, “_ set()”或“ _call()”存在并且在课堂上具有公共访问权限 “XX \ UserBundle \实体\用户”。
异常被抛入。/vendor/symfony/symfony/src/Symfony/Component/PropertyAccess/PropertyAccessor.php at line 376
对于数组属性,即教义中的任何manyToXX
关系,没有自动生成的setter方法,对于数组,始终会生成add
方法而不是set
。为什么Symfony找不到合适的方法?
临时解决方案是add
方法
public function setGroups(\FOS\UserBundle\Model\GroupInterface $groups)
{
return $this->addGroup($groups);
}
到用户实体。但在我看来,这不是正确的解决方案......有人知道错误在哪里或发生了什么?
我正在使用Symfony版本2.4.1
感谢。
答案 0 :(得分:1)
答案 1 :(得分:0)
你可能在'class'中指的是错误的类=> 'xxUserBundle:Group',但您显示的实体是User实体。这应该是用户实体吗?
我发现创建自己的表单类很有帮助,因为您可以更频繁地重用它,并且当您拥有更高级的表单(包括表单包含实体或集合的情况)时,实际上认为它使调试表单更容易。 http://symfony.com/doc/current/book/forms.html