Silverstripe userform模块,添加自定义字段

时间:2015-03-06 03:16:32

标签: php silverstripe

我将自定义下拉列表添加到用户表单模块,但一切似乎都有效:

如果我设置以下内容: [Textfield One] - 下拉选项一 [Textfield Two] - 下拉选项二

似乎只保存Textfield One下的设置,并忽略Textfield Two。如果我再返回并再次设置Textfield Two,它会消除Textfield One。

我是否应该迭代保存每个值的东西或者......?

班级;

class CustomEditableFormField extends DataExtension
{
   public function updateFieldConfiguration(FieldList $fields)
   {
    $fields->push(DropdownField::create($this->owner->getSettingName('CustomTextId'), 'Custom field')
        ->setSource(array("1" => "One", "2" => "Two"))
        ->setEmptyString($this->owner->getSetting('CustomTextId')));
   }
 }

和我的config.yml

EditableFormField:
  extensions:
   - CustomEditableFormField

2 个答案:

答案 0 :(得分:0)

添加自定义扩展程序的正确方法是:

public function updateFieldConfiguration(FieldList $fields)
{
    $fields->push(DropdownField::create(
        $this->owner->getSettingName('CustomTextId'),
        'Custom  field',
        $this->getData(),
        $this->owner->getSetting('CustomTextId'))
    );
}

主要问题在于调用getSetting函数的位置。

答案 1 :(得分:-1)

我认为你想要继承EditableFormField,而不是装饰它。

一般的经验法则是对一个数据的一个字段(但不一定)。

表单字段是通用的,不是针对目的的,因为它们是可编辑的,而不是无休止的用例数组。

所以我不确定这个解决方案是你所追求的。

特别是因为EditableFormField :: getFieldConfiguration()不接受任何参数,更不用说整个FieldList了。

您似乎正试图跳过添加表单字段的配置步骤,在这种情况下,自定义子类肯定是您的答案。