Silverstripe - 为通过 DropdownField 填充的 Varchar 设置默认值
Silverstripe - set a default value for Varchar populated via DropdownField
我在为 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。感谢您的帮助!
解决方案是在本例中使用 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
示例(在 "Default Values" 下):https://docs.silverstripe.org/en/3/developer_guides/model/data_types_and_casting/
我认为这应该可以解决您的问题。尝试通过将 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;
}
希望对您有所帮助。
我在为 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。感谢您的帮助!
解决方案是在本例中使用 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
示例(在 "Default Values" 下):https://docs.silverstripe.org/en/3/developer_guides/model/data_types_and_casting/
我认为这应该可以解决您的问题。尝试通过将 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;
}
希望对您有所帮助。