SilverStripeでは、通常、FormFieldの3番目の引数が値であるため、たとえば、TextFieldには次の引数があります。
new TextField($name = 'myField', $title = 'Please write something in my Field', $value = "yay");
ただし、これはCMSでは機能しません(少なくともページを使用している場合はSilverStripe 2で、DataObjectでは不明)。SilverStripeはフォームに現在のオブジェクトの値を入力しようとするとすべての値を上書きするためです。
したがって、いくつかの選択肢があります。最も簡単な2つの選択肢は次のとおりです。
class MyContentObject extends DataObject {
public static $db = array(
'Text' => 'HTMLText',
);
public static $has_one = array(
'Member' => 'Member',
)
public function getCMSFields() {
$fields = new FieldSet();
$fields->push(new Textarea('Text', 'Text'));
if (!$this->MemberID)
$this->MemberID = Member::currentUserID();
$fields->push(new HiddenField('MemberID'));
return $fields;
}
}
2番目のオプションは、この場合ははるかに優れています。隠しフィールドも必要ありません。onBeforeWriteを使用して、レコードがデータベースに書き込まれる直前にMemberIDを設定できます。
class MyContentObject extends DataObject {
public static $db = array(
'Text' => 'HTMLText',
);
public static $has_one = array(
'Member' => 'Member',
)
public function getCMSFields() {
$fields = new FieldSet();
$fields->push(new Textarea('Text', 'Text'));
return $fields;
}
public function onBeforeWrite() {
// this method will be called every time the object gets saved
parent::onBeforeWrite();
if (!$this->MemberID)
$this->MemberID = Member::currentUserID();
}
}