如何在 SilverStripe 中动态更改字段的类型
How to dynamically change a Field's Type in SilverStripe
我正在尝试根据 SilverStripe 中的一些条件动态更改字段的类型。
我有一个字段,例如CheckboxField()
我需要复制并将其类型更改为其他内容,例如DropdownField()
或任何其他类型的字段。
有没有办法在将对象推送到表单之前执行此操作,这里的最佳做法是什么?
您可以使用 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;
}
您可以在 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;
}
希望对您有所帮助。
我正在尝试根据 SilverStripe 中的一些条件动态更改字段的类型。
我有一个字段,例如CheckboxField()
我需要复制并将其类型更改为其他内容,例如DropdownField()
或任何其他类型的字段。
有没有办法在将对象推送到表单之前执行此操作,这里的最佳做法是什么?
您可以使用 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;
}
您可以在 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;
}
希望对您有所帮助。