使用map设置两个字段

Iva*_*van 5 silverstripe

在SilverStripe中,当我map在a中使用时,我想返回两个字段DropdownField.

我有一个Teacher带字段firstname和数据的数据对象lastname.所以在我DropdownField想要合并这两个字段并将它们传递给我map().

我当前的代码如下所示:

 public function getCMSfields() {
        $fields = FieldList::create(TabSet::create('Root'));

        $fields->addFieldsToTab('Root.Main', array(
             DropdownField::create('TeacherID', 'Teacher')->setSource(Teacher::get()->map('ID', 'Firstname'))->setEmptyString('Select one')
        );

        // etc...
        return $fields;
    }
Run Code Online (Sandbox Code Playgroud)

如何合并firstname并将lastname其传递到内部map()并将其返回给DropdownField.

3dg*_*goo 10

我们可以在自定义中创建get函数,DataObject以返回我们喜欢的任何内容.这些get函数可以在很多地方使用,包括map函数.

以下是如何添加getFullName函数以返回FullName对象中的字符串:

class Teacher extends DataObject {
    // ...

    public function getFullName() {
        return $this->FirstName . ' ' . $this->LastName;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后在我们中DropdownField我们可以Teacher::get()->map('ID', 'FullName')像这样取:

public function getCMSFields() {
    $fields = parent::getCMSFields();

    $fields->addFieldsToTab('Root.Main', array(
        DropdownField::create('TeacherID', 'Teacher')
            ->setSource(Teacher::get()->map('ID', 'FullName'))
            ->setEmptyString('Select a teacher')
    );

    return $fields;
}
Run Code Online (Sandbox Code Playgroud)