SilverStripe LookupField始终显示“(无)”

时间:2014-06-07 15:45:17

标签: php silverstripe

使用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为空时。

我应该提一下,我显然仍然需要提交表单时传递的值。

1 个答案:

答案 0 :(得分:1)

您需要为字段设置值,而不仅仅是源。该值是构造函数的第四个参数,因此您需要以下内容:

$sel = new LookupField('contact', 'Contact', $list, $user->ID);