我正在尝试根据SilverStripe中的一些条件动态更改字段的类型。
我有一个字段,例如CheckboxField()
我需要复制并更改其他内容的类型,例如DropdownField()
或任何其他类型的字段。
有没有办法在将对象推送到表单之前执行此操作并在此处进行最佳实践?
答案 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;
}
希望它有所帮助。