我不喜欢CMS中为布尔数据库字段提供的标准复选框。很容易错过。而Enum使它在模板中的使用变得复杂一点。
有没有办法可以将布尔数据库字段挂钩到getCMSFields中的DropdownField?我已经尝试了以下,显示正常,但实际上并没有将值保存到数据库字段,甚至读取值并相应地设置。
private static $db = [
'HasTalkPage' => 'Boolean'
];
public function getCMSFields() {
$fields = parent::getCMSFields();
$fields->removeByName('HasTalkPage');
$hasTalkPage = DropdownField::create('HasTalkPage', 'Needs a page?', array(1 => 'Yes', 0 => 'No'));
$fields->addFieldToTab('Root.Main', $hasTalkPage);
return $fields;
}
在该数组中尝试使用true / false而不是1/0但同样的问题。
答案 0 :(得分:1)
在其他人的代码中找到解决方案。看来字段需要添加一个 - > saveInto()命令。
$hasTalkPage = DropdownField::create('HasTalkPage', 'Needs a page?', array(1 => 'Yes', 0 => 'No'), $this->HasTalkPage);
$hasTalkPage->saveInto($this);
$fields->addFieldToTab('Root.Main', $hasTalkPage);
根据Robbie Averill对我原帖的评论,这可能只是SilverStripe 3的事情。听起来我的原始代码在4中运行良好。