Silverstripe 自动完成文本字段

Silverstripe autocomplete textfield

我在网站上使用了 tractorcow's Silverstripe-autocomplete 模块来实现文本字段的自动完成功能。但是,我想知道为什么它 returns ID 字段而不是文本(在 CompanyName 字段上)。

这是代码。

在我的页面上,我在表单上使用了它:

public function MyForm(){
$fields = FieldList::create();
...
$fields->push(AutoCompleteField::create('StudentGroup_Name', 'Company name *','',null,null,'UserCompany','CompanyName')->setAttribute('required','required'));
...

}

那么,我的数据对象如下:

class UserCompany extends DataObject{

  private static $db = [
    'CompanyID'      =>  'Int',
    'CompanyName'    =>  'Varchar(512)'
  ];

  private static $summary_fields = [
    'CompanyID'       =>  'CompanyID',
    'CompanyName'     =>  'CompanyName'
  ];

  private static $default_sort = 'CompanyName ASC';
}

刚刚查看了源码,默认的displayFieldTitle。您可以通过将 CompanyName 字段更改为 Title 或使用 setDisplayField 方法来更改 UserCompany 对象。

$fields->push(AutoCompleteField::create('StudentGroup_Name', 'Company name *','',null,null,'UserCompany','CompanyName')->setDisplayField('CompanyName')->setAttribute('required','required'));

编辑

Title 使用 setter 函数也应该有效。这意味着您不需要使用 setDisplayField。

class UserCompany extends DataObject {
  ...

  function Title() {
    return $this->CompanyName;
  }
}