2016-06-17 3 views
2

Ich versuche ein Formular zu senden, das in einer Controllererweiterung erstellt wurde. Nach dem Einreichen, wirft es mir einen FehlerFormular in der Controllererweiterung senden - SilverStripe 3.4.0

enter image description here

Leider weiß ich nicht, warum oder wie dies zu lösen, ohne den Bau in der Validierung zu verlieren und so.

Ich könnte die Formularaktion manuell zu "doSectionForm" ändern, als ich die Formulardaten erhalten werde, aber alle Validierung verloren habe.

Hier ist ein Auszug aus meinem Code.

<?php 
class SectionsPageControllerExtension extends DataExtension { 

    private static $allowed_actions = [ 
    'SectionForm' 
    ]; 

    public function SectionForm($id = null) { 
     $fields = FieldList::create(
     HiddenField::create('SectionFormID') 
      ->setValue($id) 
    ); 

     $required = RequiredFields::create(); 
     $actions = FieldList::create(
     FormAction::create('doSectionForm', 'Absenden') 
    ); 

     $form = Form::create($this->owner, 'SectionForm', $fields, $actions, $required); 
     // $form->setFormAction($this->owner->Link() . 'doSectionForm'); 

     return $form; 
    } 
    } 

    public function doSectionForm($data) { 
     echo '<pre>'; 
     print_r($data); 
    } 
} 

Antwort

5

Aktionen auf Controller in der Regel eine Instanz des SS_HTTPRequest als Parameter erhalten. Dies steht in Konflikt mit Ihrem $id = null Parameter. Also die Fehlermeldung.

Sie sollten keine Parameter für Ihre Formularmethoden verwenden, oder wenn Sie es unbedingt für die Vorlagen benötigen, stellen Sie sicher, ob die $id Parameter von SS_HTTPRequest ersten Typ ist zu überprüfen (dies der Fall sein wird, wenn das Formular abgeschickt wird).

würde eine einfache Abhilfe Code neu zu schreiben wie folgt:

$fields = FieldList::create(
    HiddenField::create('SectionFormID')->setValue(
     ($id instanceof SS_HTTPRequest) ? $id->postVar('SectionFormID') : $id 
    ) 
); 
+0

Das funktionierte. Vielen Dank. –