Php Silverstripe自动完成文本字段

Php Silverstripe自动完成文本字段,php,silverstripe,silverstripe-4,Php,Silverstripe,Silverstripe 4,我使用网站上的模块在文本字段上实现自动完成功能。但是,我想知道为什么它返回ID字段而不是texton CompanyName字段 这是密码 在我的页面上,我在表单上使用了它: public function MyForm(){ $fields = FieldList::create(); ... $fields->push(AutoCompleteField::create('StudentGroup_Name', 'Company name *','',null,null,'UserCo

我使用网站上的模块在文本字段上实现自动完成功能。但是,我想知道为什么它返回ID字段而不是texton CompanyName字段

这是密码

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

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

}
然后,我的dataobject如下所示:

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';
}

我刚刚签出了源代码,默认的显示字段是Title。您可以通过将CompanyName字段更改为Title来更改UserCompany对象,也可以使用setDisplayField方法

编辑

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

class UserCompany extends DataObject {
  ...

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

感谢@Gavin这是导致它的原因,但是更改CompanyName列可能会让人困惑,因为我们使用它作为导入CSV数据的标题。我所做的是更改_构造方法,并通过检查其计数将字段设置为$sourceFields。这样,我还可以在其他数据对象上重用该类。ifcount$this->sourceFields==1{$this->displayField=$this->sourceFields[0];…}
class UserCompany extends DataObject {
  ...

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