2012-09-23 34 views
0

我有兩個問題,需要一些幫助。重寫Symfony窗​​體的保存功能

我有一個由外鍵引用到第二個表的表:

member_child: 
    _attributes: { phpName: MemberChild } 
    id: { type: INTEGER, size: '11', primaryKey: true, autoIncrement: true, required: true } 
    member_id: { type: INTEGER, size: '11', required: true, foreignTable: member, foreignReference: id } 
    child_id: { type: INTEGER, size: '11', required: true, foreignTable: child, foreignReference: id } 

和兒童:

child: 
    _attributes: { phpName: Child } 
    id: { type: INTEGER, size: '11', primaryKey: true, autoIncrement: true, required: true, onDelete: cascade } 
    username: { type: VARCHAR, size: '45', required: true, defaultValue: '' } 
    display: { type: TINYINT, size: '1', required: true, defaultValue: '1' } 
    ...etc 

(顯然這是推進)

現在時,我想創建一個子對象,使用一個表單,我需要做兩件事:

  1. 在提交,提交會員ID
  2. 覆蓋的DoSave就會功能,這樣可以創建子的時候,我也可以創建member_child對象

我怎樣才能做到這些問題?

回答

1

我同意,你可以使用像pankar說的embedForm。你也可以覆蓋你的表格的保存方法,如下所示:

$this->childForm = new ChildForm(); 
$this->childMemberForm = new ChildMemberForm(); 

//binding, checking if form was sent etc. 

if ($this->childForm->isValid() && $this->childMemberForm->isValid()) 
{ 
    //save method should return saved object 
    $childObject = $this->childForm->save(); 
    //therefore this id could be used by next object 
    $this->childMemberForm->save(childObject->getId()); 
} 

我希望能幫到你!

0

您可以隨時在父窗體中使用內置的Symfony功能sfForm::embedForm以保存子窗體,但是我還沒有弄清楚正確使用此窗體的方法。

前段時間我遇到的一篇文章實際上給我提供瞭解決方案。 Have a look,看看它是否符合您的需求。當然這是在學說,但我想它可以很容易地移植在Propel