如何在Silverstripe CMS中清理表单输入

如何在Silverstripe CMS中清理表单输入,silverstripe,data-objects,Silverstripe,Data Objects,有人能告诉我一个例子,如何在数据对象被转储到数据库之前对其进行清理 我不知道去哪里找 我想在保存到SiteConfig之前清除一些用户输入。这将自动处理 $dataObject->Title='te“st';//这将成为“te\'st” $dataObject->write(); 有关这方面的更多信息,请参见文档:您可以使用此功能自定义页面、数据对象或站点配置的保存行为 调用write()将对象保存到数据库时会触发该函数。这包括在CMS中保存页面或更改ModelAdmin记录 下面是Silv

有人能告诉我一个例子,如何在数据对象被转储到数据库之前对其进行清理

我不知道去哪里找


我想在保存到SiteConfig之前清除一些用户输入。

这将自动处理


$dataObject->Title='te“st';//这将成为“te\'st”
$dataObject->write();


有关这方面的更多信息,请参见文档:

您可以使用此功能自定义
页面
数据对象
站点配置
的保存行为

调用
write()
将对象保存到数据库时会触发该函数。这包括在CMS中保存页面或更改ModelAdmin记录

下面是Silverstripe 3.1的一个示例,它在SiteConfig扩展上使用
onBeforeWrite
,在文本字段上剥离字符并将字符转换为小写:

SiteConfig onbefore编写示例

class CustomSiteConfig扩展了DataExtension{
私有静态$db=array(
'TwitterUsername'=>'文本'
);
公共函数updateCMSFields(FieldList$fields){
$fields->addFieldToTab('Root.Main',newtextfield('Twitter用户名','Twitter用户名');
}
公共函数onBeforeWrite(){
$this->owner->TwitterUsername=strtolower($this->owner->TwitterUsername);
$this->owner->TwitterUsername=preg_replace(“/[^a-z0-9]/”,“”,$this->owner->TwitterUsername);
父级::onbeforewite();
}
}
注意:对于上面的示例,需要将
CustomSiteConfig
扩展应用于
SiteConfig
。这可以通过yml配置文件或_config.php文件完成

mysite/_config/config.yml

---
名称:网站
在“framework/*”、“cms/*”之后
---
# ...
#站点配置扩展
站点配置:
扩展:
-CustomSiteConfig
# ...

mysite/_config.php

global$project;
$project='mysite';
// ...
SiteConfig::添加_扩展(“CustomSiteConfig”);
// ...

通常情况下,您不希望在编写数据之前转义数据,而是应该在输出数据之前转义数据。您有关于您的用例的更多信息吗?@ajshort我想在进入db之前转换成小写并修剪非字母字符。@ajshort的目的是保存twitter哈希标记,以便在解析api返回时进行检查。这是指CMS还是前置表单?别忘了,这不会自动运行。您需要从我的站点或您的模块之一的_config.php加载它,即:SiteConfig::add_extension('CustomSiteConfig');您也可以通过_config文件夹中的yml文件加载它。谢谢@elliot_at_silverstripe。我已经在我的回答中加上了那张便条。