使用地图设置两个字段

Set two fields using map

在 SilverStripe 中,当我在 DropdownField.

中使用 map 时,我想 return 两个字段

我有一个包含字段 firstnamelastname 的数据对象 Teacher。所以在我的 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;
    }

如何合并 firstnamelastname 并将其传递给 map() 和 return 到 DropdownField.

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

以下是如何将 getFullName 函数添加到 return 我们对象中的 FullName 字符串:

class Teacher extends DataObject {
    // ...

    public function getFullName() {
        return $this->FirstName . ' ' . $this->LastName;
    }
}

然后在我们的 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;
}