如何在SilverStripe中动态更改Field的类型

时间:2015-09-05 00:00:33

标签: php forms object field silverstripe

我正在尝试根据SilverStripe中的一些条件动态更改字段的类型。

我有一个字段,例如CheckboxField()我需要复制并更改其他内容的类型,例如DropdownField()或任何其他类型的字段。

有没有办法在将对象推送到表单之前执行此操作并在此处进行最佳实践?

2 个答案:

答案 0 :(得分:1)

您可以使用 replaceField http://api.silverstripe.org/3.1/class-FieldList.html#_replaceField

function getCMSFields() {
  $fields = parent::getCMSFields();
  $fields->replaceField('MyField', DropdownField::create('MyField', 'My field'));
  return $fields;
}

答案 1 :(得分:0)

您可以在getCMSField

中添加条件
function getCMSFields() {
    $fields = parent::getCMSFields();
    $source = SomeDataObject::get();
    $fields->removeByName('MyField');
    if($source->count() > 1) {
        $fields->addFieldToTab('MyTab', DropdownField::create('MyField', 'My field', $source->map()->toArray()));
    } else {
        $fields->addFieldToTab('MyTab', CheckboxField::create('MyField', 'My field', $source->first()->Name));
    }
    return $fields;
}

希望它有所帮助。