2011-04-19 24 views
0

我有兩張桌子。我正在渲染兩個表的字段(useruser_education)。一個用戶可以有多個記錄(教育細節)。要編輯用戶的信息,我只能檢索到特定user_education的詳細信息的一條記錄。如何檢索特定用戶的user_education表的多個記錄?我在單個頁面中顯示來自兩個表格的字段editSuccess()用相關記錄呈現和更新Symfony表單?

我已經創建的這兩種形式的對象,如下面

foreach ($user->getUserEducations() as $edu) 
{ 
    $education = $edu; 
    break; 
} 


$this->form = new stFormProfile($user); 
$this->form1 = new UserEducationForm($education); 

在上述代碼$educationuser_education的單個記錄。我應該傳遞一組user_education對象($user->getUserEducations())。但它不會接受一組對象。

我綁定值,如下圖所示,

$this->form1->bind($request->getParameter('user_education'), 
$request->getFiles('user_education')); 
$this->form->bind($request->getParameter('profile'), $request->getFiles('profile')); 

我使用下面的代碼保存更新的值,

$this->form->save(); 
$this->form1->save(); 

用戶表的字段都得到更新。但不適用於user_education表。我得到 _csrf_token [需要]錯誤。

UserEducationForm.class.php由Symfony自己使用最初給出的數據庫模式創建。在該模式中,我沒有爲user_education表指定任何主鍵。所以Symfony自己創建了一個名爲id的主鍵。這是否影響任何東西?

我渲染這些領域如下

print $form["username"]->renderLabel() 
print $form["username"]->render() 
print $form["email"]->renderLabel() 
print $form["email"]->render() 
print $form["firstname"]->renderLabel() 
print $form["firstname"]->render() 
print $form["lastname"]->renderLabel() 
print $form["lastname"]->render() 
print $form['skillset']->renderLabel() 
print $form['skillset']->render() 
print $form['years_of_experience']->renderLabel() 
print $form['years_of_experience']->render() 

教育詳情

print $form1['college_name']->renderLabel() 
print $form1['college_name']->render() 
print $form1['coursename']->renderLabel() 
print $form1['coursename']->render() 
print $form1['percentage']->renderLabel() 

我需要使教育的多行詳細信息表(使用的foreach)。

+0

你可以告訴你在模板中有代碼來渲染正在生成_csrf_token [必需]錯誤的形式。它可能沒有被添加到表格中 – 2011-04-19 15:02:50

+0

這與Symfony 1.0.16仍然一樣,就像其他問題一樣嗎?在Symfony的新版本中,您可以使用[*嵌入的表單*](http://propel.posterous.com/embed-relation-forms-in-one-line-with-sfprope)來解決這個問題,它可以完全滿足您的需求。如果你想在Symfony的這個(非常)舊版本中模仿這種行爲,我認爲你必須自己做一些沉重的舉動。 (在回覆評論時使用'@ Jan',我收到通知) – 2011-04-20 06:55:11

+0

@ d.syph.3r:謝謝,我更新了模板渲染代碼。 – Darshan 2011-04-20 10:25:48

回答

1

你需要渲染_csrf_token場藏漢

print $form['_csrf_token'] 

print $form1['_csrf_token'] 
+0

或者將它從小部件和驗證方案中移除。它添加在['sfForm :: addCSRFProtection'](http://trac.symfony-project.org/browser/tags/RELEASE_1_1_6/lib/form/sfForm.class.php#L578)。 – 2011-04-20 12:11:52

+0

@Jan。刪除CSRF保護等安全功能肯定是一件壞事? – 2011-04-20 12:18:46

+1

確實,我的錯誤是:你應該只爲* extra *表單移除CSRF字段,併爲主表單保留一個。 [sfForm :: embedForm'函數](http://trac.symfony-project.org/browser/tags/RELEASE_1_1_6/lib/form/sfForm.class.php#L258)也是如此。 – 2011-04-20 12:52:01