Silverstripe 3 - 使用下拉列表Yes / No来表示CMS中的布尔$ db字段

时间:2018-04-19 07:52:16

标签: php silverstripe

我不喜欢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但同样的问题。

1 个答案:

答案 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中运行良好。