您可以使用onBeforeWrite 函数自定义Page、DataObject 或SiteConfig 的保存行为。
调用write()将对象保存到数据库时触发该函数。这包括在 CMS 中保存页面或更改 ModelAdmin 记录。
下面是 Silverstripe 3.1 的示例,它在 SiteConfig 扩展上使用 onBeforeWrite 来剥离字符并将字符转换为文本字段上的小写:
SiteConfig onBeforeWrite 示例
class CustomSiteConfig extends DataExtension {
private static $db = array(
'TwitterUsername' => 'Text'
);
public function updateCMSFields(FieldList $fields) {
$fields->addFieldToTab('Root.Main', new TextField('TwitterUsername', 'Twitter Username'));
}
public function onBeforeWrite() {
$this->owner->TwitterUsername = strtolower($this->owner->TwitterUsername);
$this->owner->TwitterUsername = preg_replace("/[^a-z0-9]/", '', $this->owner->TwitterUsername);
parent::onBeforeWrite();
}
}
注意:要使上述示例工作,CustomSiteConfig 扩展需要应用于SiteConfig。这可以通过 yml 配置文件或 _config.php 文件来完成。
mysite/_config/config.yml
---
Name: site
After: 'framework/*','cms/*'
---
# ...
# SiteConfig Extension
SiteConfig:
extensions:
- CustomSiteConfig
# ...
或者
mysite/_config.php
global $project;
$project = 'mysite';
// ...
SiteConfig::add_extension('CustomSiteConfig');
// ...