我在我的註冊表單(FOSUserBundle)中實現了一個組選擇。提交表單後Symfony會將我的類型映射爲錯誤。 目標是通過註冊表單將所選組添加到用戶。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會拋出以下異常。
無論是屬性 「基團」,也不的方法的一個 「setGroups()」, 「_ 組()」 或 「 _call()」 的存在,並具有在 類「XX \ UserBundle公共訪問\實體\用戶」。
唯一的例外是在throwen。/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
謝謝。
這將是一次使用收集表型。 – Lighthart
請在行動中顯示您的代碼,請 –
我認爲收集不是正確的表單類型。用戶可以選擇一個現有的組。他無法添加新組。在我看來,Symfony不會檢測用戶和組之間的manyToMany關係。一般來說,我的表格看起來不錯,但行爲錯誤。 – createproblem