2016-08-01 10 views
2

Ich habe ein einfaches Drop-Down-Feld mit zwei Werten und ein abhängigen Dropdown-Feld:Silvers abhängig Dropdown - x ist keine gültige Option

public function areaForm() { 
    $datasource = function($val) { 
     if ($val =='yes') { 
      $areas = DataObject::get('Area', 'ParentID = 0'); 
      return $areas->map('ID', 'Name'); 
     } 
     if ($val == 'no') { 
      return false; 
     } 
    }; 

    $fields = new FieldList(
     TextField::create('Name', 'Area Name:'), 
     $dropField = DropdownField::create('isChild', 'Is this a sub Area?', array('yes' => 'Yes', 'no'=>'No')) 
      ->setEmptyString('Select one'), 
     DependentDropdownField::create('ParentSelect', 'Select Parent Area:', $datasource) 
      ->setDepends($dropField) 
      ->setEmptyString('Select one') 
    ); 

    return new Form($this, __FUNCTION__, $fields, FieldList::create(new FormAction('doSaveArea', 'Save area'))); 
} 

public function doSaveArea($data, $form) { 
    var_dump($data); 
    exit; 
    $name = $data['Name']; 
    $isChild = $data['isChild']; 

    if ($isChild === 'no') { 
     $area = new Area(); 
     $area->Name = $name; 
     $area->ParentID = 0; 
     $area->write(); 
    } 
    elseif ($isChild === 'yes') { 
     $area = new Area(); 
     $area->Name = $name; 
     $area->ParentID = $data['ParentSelect']; 
     $area->write(); 
    } 
    $this->redirectBack(); 
} 

Wann immer ich versuche, meine Aufgabe zu speichern, indem Sie das Formular abschicken, es gibt mir die gleiche Nachricht:

Bitte wählen Sie einen Wert in der Liste zur Verfügung gestellt. x ist keine gültige Option

Die Werte werden korrekt ausgefüllt. Ich kann sie im Browser sehen, indem ich das Element überprüfe. Aber wenn ich ID 1 zum Beispiel wähle, heißt es "1 ist keine gültige Option" usw. für jedes Gebietsobjekt. Es bleibt bei der Validierung hängen, geht nicht einmal zur Aktion. Ich habe ähnliche Dinge in anderen Teilen der Website/anderen Websites gemacht und sie funktionieren gut.

Warum blockiert diese Validierung fälschlicherweise die Formularübertragung und wie beheben wir dies?

Antwort

1

Scheint, Sie müssen nur ein Array Ihres Map Objekts erstellen.

if ($val =='yes') { 
    $areas = Area::get()->filter('ParentID', '0'); 
    return $areas->map('ID', 'Name')->toArray(); 
} 

Normalerweise könnte man das Map Objekt als Quelle für ein DropdownField verwendet nur. Aber ich denke, die DependentDropdownField hat ein kleines Problem mit dem Map Objekt.

Verwandte Themen