我在设置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。谢谢你的帮助!
答案 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;
}
我希望这会有所帮助。