Как мне очистить ввод формы в Silverstripe CMS

#silverstripe #data-objects

#silverstripe #данные-объекты

Вопрос:

Может кто-нибудь, пожалуйста, направить меня к примеру того, как очистить поле из DataObject ДО того, как оно будет сброшено в БД?

Я не знаю, где искать.

Я хочу очистить некоторый пользовательский ввод, прежде чем он будет сохранен в SiteConfig.

Комментарии:

1. Как правило, вы не хотите экранировать данные перед их записью — вместо этого вы должны экранировать их перед выводом. У вас есть дополнительная информация о вашем варианте использования?

2. @ajshort Я хочу преобразовать в нижний регистр и обрезать не альфа-символы перед переходом в БД.

3. @ajshort с целью сохранения хэштегов Twitter для проверки при анализе возврата api

4. Это относится к CMS или к интерфейсной форме?

Ответ №1:

Вы можете настроить поведение сохранения 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');

// ...
  

Комментарии:

1. Не забывайте, это не будет выполняться автоматически. Вам нужно загрузить его из _config.php на моем сайте или в одном из ваших модулей, т.Е.: SiteConfig::add_extension(‘CustomSiteConfig’); Вы также можете загрузить его через файл yml внутри папки _config.

2. Спасибо @elliot_at_silverstripe. Я добавил это примечание в свой ответ.

Ответ №2:

Это делается автоматически.


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

Более подробную информацию об этом можно найти в документах: http://doc.silverstripe.com/framework/en/topics/security