2017-04-26 75 views
0

上我有以下形式的代碼:SilverStripe:表的工作方式主頁上,但不是一個子頁面

ContactPage_Controller extends Page_Controller { 

    static $allowed_actions = array(
     'submit' 
    ); 

    public function Send() { 

     $contact = new Contact(); 
     $validator = new RequiredFields('Anrede', 'Vorname', 'Nachname', 'Email', 'Message'); 

     $fields = new FieldList(
      new TextField('securityidentifier', 'securityidentifier', $this->cryptTime()), 
      new DropdownField('Anrede', 'Anrede:*', $contact->dbObject('Anrede')->enumValues()), 
      new TextField('Vorname', 'Vorname:*'), 
      new TextField('Nachname', 'Nachname:*'), 
      new EmailField('Email', 'E-Mail-Adresse:*'), 
      new TextareaField('Message', 'Nachricht:*') 
     ); 

     $actions = new FieldList(
      new FormAction('submit', 'Senden') 
     ); 

     return new Form($this, 'submit', $fields, $actions, $validator); 
    } 

    // ... 
} 

如果我把它作爲一個單獨的頁面也能正常工作。當我嘗試使用它作爲子頁面時,表單不顯示。我得到的標題,我得到的內容,但我沒有得到的形式。

任何想法爲什麼這不能正常工作?

+0

「subpage」是什麼意思? – bummzack

+0

子頁面是否也是聯繫頁面? – wmk

+0

@bummzack與子頁面我的意思是childpage。 –

回答

4

您的表單在ContactPage_Controller上定義。如果您試圖渲染它的子頁面不是ContactPage的後代,那麼該方法通過繼承是不可見的。有幾個選項。

1)將表格放入Page_Controller。通常,所有的頁面都是從這個頁面繼承的,所以他們可以訪問表單。雖然不是很好的做法。儘量保持Page課程的精益。

2)創建一個將表單工廠方法和處理程序注入控制器的擴展。這更多的是「橫向」的方式,而不是垂直的繼承方式,並且趨向於更好地擴展。

3)沿着同樣的路線,創造一個做同樣事情的特質。可能是更好的選擇,因爲擴展是特殊的,並且可能會在某個時候被棄用。

相關問題