代码之家  ›  专栏  ›  技术社区  ›  mylesthe.dev

如何在SilverStripe中动态更改字段类型

  •  1
  • mylesthe.dev  · 技术社区  · 9 年前

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

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

    在将对象推到表单之前,有没有方法做到这一点?这里的最佳实践是什么?

    2 回复  |  直到 9 年前
        1
  •  2
  •   Gavin Bruce    9 年前

    您可以使用 替换字段 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;
    }
    
        2
  •  0
  •   cbarberis    9 年前

    可以在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;
    }
    

    希望有帮助。