【问题标题】:How do I sanitize form input in Silverstripe CMS如何清理 Silverstripe CMS 中的表单输入
【发布时间】:2014-08-03 15:59:22
【问题描述】:

有人可以指导我看一个示例,说明如何在数据对象转储到数据库之前对其进行清理?

我不知道去哪里找。

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

【问题讨论】:

  • 一般情况下,您不想在写入数据之前对其进行转义 - 相反,您应该在输出之前进行转义。你有更多关于你的用例的信息吗?
  • @ajshort 我想在进入 db 之前转换为小写并修剪非字母字符。
  • @ajshort 用于保存 twitter 主题标签以在解析 api 返回时进行检查
  • 这是指CMS还是前端表单?

标签: silverstripe data-objects


【解决方案1】:

您可以使用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');

// ...

【讨论】:

  • 别忘了,这不会自动运行。您需要从我的站点或您的模块之一中的 _config.php 加载它,即: SiteConfig::add_extension('CustomSiteConfig');您也可以通过 _config 文件夹中的 yml 文件加载它。
  • 谢谢@elliot_at_silverstripe。我已将该注释添加到我的答案中。
【解决方案2】:

这是自动处理的。

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

有关这方面的更多信息,请参阅文档:http://doc.silverstripe.com/framework/en/topics/security

【讨论】:

    猜你喜欢
    • 2015-02-26
    • 2011-08-13
    • 2022-07-08
    • 2017-01-27
    • 2014-08-12
    • 2020-09-03
    • 2015-05-21
    • 2022-11-17
    • 1970-01-01
    相关资源
    最近更新 更多