使用SilverStripe 3.1我试图让表单显示特定的,预先选择的值而不是下拉列表。由于文档指示LookupField适用于这种情况,我试图使用它,但无论我做什么,它总是显示(无)而不是我传递的值。似乎没有人遇到过这种问题,因为谷歌没有提出任何有用的东西。无论是我还是使用Google都失败了。
$fields = new FieldList(...);
// $user is Contact (a DataObject) or null
if ($user == null) {
$raw = DataObject::get('Contact', 'mayContact = 1', 'sortOrder ASC');
$list = array();
foreach ($raw as $item) {
$list[$item->ID] = $item->name . (empty($item->rank) ? '' : ' (' . $item->rank . ')');
}
$sel = new DropdownField('contact', 'Contact', $list);
} else {
$list = array();
$list[$user->ID] = $user->name . (empty($user->rank) ? '' : ' (' . $user->rank . ')');
$sel = new LookupField('contact', 'Contact', $list);
}
$fields->insertBefore($sel, 'Name');
return new Form($this, 'contactForm', $fields, new FieldList(FormAction::create('send')));
我看到它的方式,它应该显示一个特定的联系人名称(可能是Rank),我传递的数组与创建的数组相同,唯一的区别是它只有一个条目而不是多个条目当$user
为空时。
我应该提一下,我显然仍然需要提交表单时传递的值。
答案 0 :(得分:1)
您需要为字段设置值,而不仅仅是源。该值是构造函数的第四个参数,因此您需要以下内容:
$sel = new LookupField('contact', 'Contact', $list, $user->ID);