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

时间:2014-06-13 06:59:13

标签: silverstripe data-objects

有人可以指导一下如何在数据对象被转储到数据库之前清理一个字段的示例吗?

我不知道在哪里看。

我希望在将一些用户输入保存到SiteConfig之前清理它。

2 个答案:

答案 0 :(得分:2)

您可以使用onBeforeWrite功能自定义PageDataObjectSiteConfig的保存行为。

调用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');

// ...

答案 1 :(得分:0)

这是自动处理的。

$dataObject->Title = 'te"st'; // This will become "te\"st" $dataObject->write();

有关此内容的详情,请参阅文档:http://doc.silverstripe.com/framework/en/topics/security