Silverstripe - 设置通过DropdownField填充的Varchar的默认值

时间:2018-01-20 18:18:01

标签: php silverstripe

我在设置Size字段的默认数据库值时遇到问题,该字段由值数组中的Silverstripe DropdownField()填充。

class PartnerLogo extends DataObject {

  ...

  private static $db = array(
    "Size" => "Varchar(255)"
  );

  private static $defaults = array(
    "Size" => "sm"
  );

  public function getCMSFields() {

    $fields = new FieldList(new TabSet("Root"));

    $fields->addFieldToTab("Root.Main", 
      new DropdownField("Size[]", "Size", 
        array( 
          "xs" => "Extra Small", 
          "sm" => "Small", 
          "md" => "Medium", 
          "lg"=> "Large" 
        ), 
        "sm"
      )
    );

    return $fields;

  }

  ...

}

在CMS中,如果我创建新记录并单击“保存”,则Size字段为空。是否可以为Size提供默认值字符串?

我正在使用Silverstripe 3.5。谢谢你的帮助!

2 个答案:

答案 0 :(得分:2)

解决方案是在此实例中使用populateDefaults()函数而不是$defaults数组。这也意味着我可以从DropdownField函数中删除方括号和最终参数(请参阅我对该问题的评论):

class PartnerLogo extends DataObject {

  ...

  private static $db = array(
    "Size" => "Varchar(255)"
  );

  public function populateDefaults() {
    $this->Size = "sm";
    parent::populateDefaults();
  }

  public function getCMSFields() {

    $fields = new FieldList(new TabSet("Root"));

    $fields->addFieldToTab("Root.Main", 
      new DropdownField("Size", "Size", 
        array( 
          "xs" => "Extra Small", 
          "sm" => "Small", 
          "md" => "Medium", 
          "lg"=> "Large" 
        )
       )
    );

    return $fields;

  }

  ...

}

文档可能不正确,或者至少应该记下您无法将Varchar的默认值设置为字符串,就像{Enum一样示例中的1}}(在"默认值"下):https://docs.silverstripe.org/en/3/developer_guides/model/data_types_and_casting/

答案 1 :(得分:0)

我认为这应该可以解决您的问题。尝试使用以下代码替换getCMSFields函数,在下拉字段中设置默认值。

public function getCMSFields()
{
    $fields = new FieldList(new TabSet("Root"));

    $fields->addFieldToTab(
        "Root.Main",
        DropdownField::create("Size", "Size")
            ->setSource(
                array(
                "xs" => "Extra Small",
                "sm" => "Small",
                "md" => "Medium",
                "lg" => "Large",
                )
            )->setValue("sm") //set the default value to small
    );
    return $fields;
}

我希望这会有所帮助。