有人可以指导我看一个如何在数据对象转储到数据库之前对其进行清理的示例吗?
我不知道在哪里看。
我想在将某些用户输入保存到 SiteConfig 之前对其进行清理。
有人可以指导我看一个如何在数据对象转储到数据库之前对其进行清理的示例吗?
我不知道在哪里看。
我想在将某些用户输入保存到 SiteConfig 之前对其进行清理。
您可以自定义 a 的保存行为Page
,DataObject
或SiteConfig
使用该onBeforeWrite
函数。
write()
该函数在调用以将对象保存到数据库时触发。这包括在 CMS 中保存页面或更改 ModelAdmin 记录。
下面是 Silverstripe 3.1 的示例,它onBeforeWrite
在 SiteConfig 扩展上使用以去除文本字段上的字符并将字符转换为小写:
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');
// ...
这是自动处理的。
$dataObject->Title = 'te"st'; // This will become "te\"st"
$dataObject->write();
有关这方面的更多信息,请参阅文档:http ://doc.silverstripe.com/framework/en/topics/security