単純なhas_one関係を持つ2つのオブジェクトを持つ標準ModelAdminを使用する。私はMyDataObjectを編集中に "Add HasManyDataObject"をクリックした後、関連するオブジェクトにアクセスしたいと思います。私が満足していない本当のハックが含まれていますが、動作します。もう1つのハックはURLからIDを奪い取ることです。両方ともが悪いです。編集フォームに保存する前に関連するクラスインスタンスを取得する強力なメソッド
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;
}
}
私は何かがこのように動作するように期待...
$myDataObject = $this->MyDataObject();
...しかし、ノー。
面倒なことは、オブジェクトが編集フォームの読み取り専用フィールドとして指定されていることです。何とか利用可能でなければなりません!
すべての回答が非常に高く評価されました。
...追加と、次の機能は、「親」オブジェクトを返す使用してありませんか?既存のアイテムを$ has_oneとして追加するにはhttps://github.com/briceburg/silverstripe-pickerfield/blob/master/code/HasOnePickerField.php – wmk
ありがとうございます。 – Barry