2012-06-01 76 views
1

首先,感謝所有看過這個問題的人。 我得到了一個類似於userFormType的FormType。symfony2呈現表格的一部分

class UserFormType extends AbstractType{ 
    public function buildForm(FormBuilder $builder, array $options) 
    { 
     $builder->add('address','collection', ....) 
       ->add('group','entity',....) 
       ->add('companies','collection',....); 
     ... 
    } 

} 

所以你看我在用戶表單中有兩個集合。我創建了這個表單,並且設置了這些公司。當我想只修改公司的信息和地址,但不與羣組聯繫。所以我必須呈現用戶表單,但不是一些公司表單或地址表單。所以我寫了這樣一個控制器:

$user= $this->get('security.context')->getToken()->getUser(); 
    $form =$this->createForm(new UserForm(),$user); 
    $request = $this->get('request'); 
    if ('POST' == $request->getMethod()) { 
     $form->bindRequest($request); 
     if ($form->isValid()) { 
      $em = $this->getDoctrine()->getEntityManager(); 
      $em->persist($user); 
      $em->flush(); 
      .... 
     } 

    } 

當然,我不想修改組,所以在樹枝模板,我沒有渲染組。表單呈現正確,但每次我嘗試提交它,它告訴我:

Argument 1 passed to ... User->setGroup() must be an instance of Group ... null given 

所以我問,我該怎麼辦?

+0

如果您不想編輯它,爲什麼要將該組添加到表單中? –

回答

1

錯誤具體是因爲在用戶的方法定義大概是:

public function setGroup(Group $group); 

但爲了將其設置爲null,將需要:

public function setGroup(Group $group = null); 

這將修正這個錯誤,但它仍然可能不是您想要的功能。我的問題是,如果你不使用它,爲什麼表單上的組字段?您可能需要使用其他表單類型或向表單傳遞選項,以免在編輯過程中包含組字段。

+1

非常感謝。該組不應該爲空。並且用戶已經擁有一個組。例如,我想與編輯表單共享註冊表單。所以註冊表格需要一個組選項而不是編輯表單。我的理解是,你建議我爲編輯創建另一個表單,這樣就沒有問題了。這就是我上週所做的。但是我真的很想知道我們不能只呈現一部分表單,當我們嘗試綁定請求時,如果我已經在對象中綁定了某些東西,那麼未呈現的元素將不會被設置爲null。像我的用戶一樣。 – ferdinandfly