2010-11-05 36 views
1

這是我的情況,我有3個表格:學生 | 附件 | 學生 _attachment_ 鏈接Symfony EmbedForm

學生表通過classRef相對於鏈接表與附件相鏈接表作爲是附件表,學生表。

relations: 
Students: 
    class: Student 
    refClass: StudentAttachmentLink 
    local: attachment_id 
    foreign: student_id 

relations: 
Attachments: 
    class: Attachment 
    refClass: StudentAttachmentLink 
    local: student_id 
    foreign: attachment_id 

那麼所需要的是編輯學生,我要上傳新文件的選項(附件)

我已經通過了文件時,嵌入附件形式進入學生的形式,從而這具有奇妙示例Here

在這個例子中它們設置子窗體,然後由當前對象設置爲新的一個被設置這樣扎一起形成:

public function configure() 
{ 
    $subForm = new sfForm(); 
    for ($i = 0; $i < 2; $i++) 
    { 
    $productPhoto = new ProductPhoto(); 
    $productPhoto->Product = $this->getObject(); 

    $form = new ProductPhotoForm($productPhoto); 

    $subForm->embedForm($i, $form); 
    } 
    $this->embedForm('newPhotos', $subForm); 
} 

你可以在這個例子中看到$ productPhoto-> Product = $ this-> getObject();
設置要保持

現在從我可以告訴這個祕密的關係,這是一個多對一的關係,但是我有很多很多,所以我做到以下幾點:

public function configure() 
    { 
     $attachment = new Attachment(); 
     $attachment->Student = $this->getObject(); 

     $form = new AttachmentForm($attachment); 
     $this->embedForm('newFile',$form); 
    } 

這會產生一個錯誤: 無法調用Doctrine_Core :: set()時,第二個參數應該是設置多對多引用時Doctrine_Collection的一個實例。

我很困惑,因爲我認爲我的對象是一個Doctrine_Collection,非常感謝任何幫助!

UPDATE:
或許我問錯了問題或解決單一故障點僅部分相關。我想要做的是能夠從學生表單中添加/刪除一個附件,並讓它與該學生相關,而無需自定義formAction和save()動作。我發現,與Symfony的1.4,我可以使用:

$this->embedRelation('Attachments'); 

這項工作充滿了想象編輯在大多數情況下我仍然需要與它合作了一點,但我不能添加或刪除學生的附件形式,這當然期望的結果是能夠完全控制來自學生形式的附件,即添加/刪除/更新附件。

還有一個更好的方法來做到這一點的任何建議,也就是說,我應該在我的學生表單中添加一個「添加附件」鏈接,將我帶到附件/新頁面,但如果我這樣做,我該如何傳遞當前學生,所以該選項可自動...我有很多東西要學這個框架: -/

+0

你可以編輯你的文章,不是嗎?如果沒有,我會爲你做。現在,正如我告訴你的,你使用的例子是一對多的關係。你的表單是關於一個Student對象的,你試圖設置一個集合。它不能工作。 – greg0ire 2010-11-09 20:37:40

回答

0

我想你很快就會理解這個問題,如果你使用正確的命名你的關係:

relations: 
    Students: 
    refClass: StudentAttachmentLink 
    local: attachment_id 
    foreign: student_id 

relations: 
    Attachments: 
    refClass: StudentAttachmentLink 
    local: student_id 
    foreign: attachment_id 

標記「s」。這是一個多對多的關係。你使用的例子是一對多的關係。

+0

上述評論仍然正確嗎? – greg0ire 2010-11-09 20:38:25

0

像以前的答案一樣,你不能嵌入一個有多對多關係的表格,也許你需要把關係改爲多對一,因爲我不認爲一個附件屬於很多學生,但如果那是你的情況下不能嵌入學生像symfony的文檔例如附件,但你可以遵循這樣的:

http://di-side.com/di-side/services/web-solutions/symfony-embedrelation-many-to-many-doctrine-relations/

如果你改變了你的關係可以使用本教程包括jQuery的功能嵌入dinamically形式或一個部分到另一個

http://tech.cibul.net/embedded-forms-with-symfony-1-4-and-jquery/