2014-01-26 79 views
1

我在我的註冊表單(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

謝謝。

+3

這將是一次使用收集表型。 – Lighthart

+0

請在行動中顯示您的代碼,請 –

+0

我認爲收集不是正確的表單類型。用戶可以選擇一個現有的組。他無法添加新組。在我看來,Symfony不會檢測用戶和組之間的manyToMany關係。一般來說,我的表格看起來不錯,但行爲錯誤。 – createproblem

回答

0

你可能是指到錯誤的類「類」 =>「xxUserBundle:集團」,但你表現出的實體是用戶實體。這應該是用戶實體?

我發現它有助於創建自己的表單類,你可以更經常地重複使用它,實際上認爲它使調試形式更容易,當你有更高級的形式,包括其中一種形式包含一個實體或集合的情況。 http://symfony.com/doc/current/book/forms.html

0

我也不想使用集合表單類型。 Symfony2, relation manyToMany in a Form給了我這個答案。地址:

「多」 =>真

到窗體實體

+0

添加: 'multiple'=> true 確實停止了應用程序中斷,現在我的屏幕上沒有出現錯誤。 但是數據庫仍未獲得新用戶(fos_user)和用戶組(fos_user_group)詳細信息的更新。 我按照https://github.com/FriendsOfSymfony/FOSUserBundle/blob/master/Resources/doc/index.md 中的說明安裝了FOSUserBundle請建議我缺少的東西。我的實體和表單類型與#createproblem發佈的完全相同。 我也沒有手動添加setGroups()函數。 – AkiShankar