Verwenden eines Standard ModelAdmin mit zwei Objekten mit einer einfachen has_one-Beziehung. Ich möchte auf das entsprechende Objekt zugreifen, nachdem ich während der Bearbeitung eines MyDataObject auf "Add HasManyDataObject" geklickt habe. Enthalten ist ein echter Hack, mit dem ich nicht zufrieden bin, aber funktioniert. Ein weiterer Hack soll die ID aus der URL herauskratzen. Beide nicht gut.Robuste Methode zum Abrufen der zugehörigen Klasseninstanz vor dem Speichern im Bearbeitungsformular
class MyModelAdmin extends ModelAdmin {
static $managed_models = array('MyDataObject');
static $url_segment = 'mymodeladmin';
static $menu_title = 'MyModelAdmin';
static $model_importers = array();
}
class MyDataObject extends DataObject {
private static $db = array('Name' => 'Varchar(255)');
private static $has_many = array('HasManyDataObjects' => 'HasManyDataObject');
function getCMSFields() {
$fields = parent::getCMSFields();
Session::set('MyDataObjectID',$this->ID);
Session::save();
return $fields;
}
}
class HasManyDataObject extends DataObject {
private static $db = array('Name' => 'Varchar(255)');
private static $has_one = array('MyDataObject' => 'MyDataObject');
function getCMSFields() {
$fields = parent::getCMSFields();
$myDataObject = MyDataObject::get()->ByID(Session::get('MyDataObjectID'));
return $fields;
}
}
Ich würde erwarten so etwas zu arbeiten ...
$myDataObject = $this->MyDataObject();
... aber nein.
Die frustrierende Sache ist, dass es das Objekt als schreibgeschütztes Feld im Bearbeitungsformular angibt, also muss es irgendwie verfügbar sein!
Alle Antworten sehr geschätzt.
Gibt es nicht eine gridfield Komponente eine neue has_many Komponente zu schaffen? Um ein bestehendes Element als $ has_one hinzuzufügen gibt es https://github.com/briceburg/silverstripe-pickerfield/blob/master/code/HasOnePickerField.php – wmk
hey @wmk wenn es da ist - dann antworte und ich werde es akzeptieren :) – Barry