FlexForms 

FlexForms can be used to store data within an XML structure inside a single DB column.

Extbase plugin settings as FlexForm 

Deprecated since version 14.0 Deprecation: #107047 - ExtensionManagementUtility::addPiFlexFormValue()

\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addPiFlexFormValue() has been deprecated. For Extbase plugins use the 7th parameter of method \TYPO3\CMS\Extbase\Utility\ExtensionUtility::registerPlugin() instead.

FlexForms are commonly used to configure Extbase plugins:

packages/my_extension/Configuration/TCA/Overrides/tt_content.php
<?php

use TYPO3\CMS\Extbase\Utility\ExtensionUtility;

$ctypeKey = ExtensionUtility::registerPlugin(
  'MyExtension',
  'MyPlugin',
  'My Plugin Title',
  'my-extension-icon',
  'plugins',
  'Plugin description',
  'FILE:EXT:my_extension/Configuration/FlexForms/MyFlexform.xml',
);
Copied!

Within the FlexForm use settings. as prefix for the identifier of your fields. Any field prefixed with settings. will be automatically available in the controller's settings array ($this->settings['someSetting']) and in the Fluid templates as variable {settings.someSetting}. For example:

packages/my_extension/Configuration/FlexForm.xml
<T3DataStructure>
  <sheets>
    <sDEF>
      <ROOT>
        <sheetTitle>
          Sheet Title
        </sheetTitle>
        <type>array</type>
        <el>
          <settings.someSetting>
            <label>Some Setting</label>
            <config>
              <type>input</type>
            </config>
          </settings.someSetting>
          <settings.anotherSetting>
            <label>Another Setting</label>
            <config>
              <type>input</type>
            </config>
          </settings.anotherSetting>
        </el>
      </ROOT>
    </sDEF>
  </sheets>
</T3DataStructure>
Copied!

For an example see the plugin settings of the plugins in extension georgringer/news .

Plain plugins configured by FlexForms 

Deprecated since version 14.0 Deprecation: #107047 - ExtensionManagementUtility::addPiFlexFormValue()

\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addPiFlexFormValue() has been deprecated. For plain plugins use the 2nd parameter of method \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addPlugin() instead.

Complex content elements or plain plugins not registered via Extbase can use FlexForms for configuration as well. Plain plugins can be configured with FlexForms in a similar fashion to Extbase plugins:

packages/my_extension/Configuration/TCA/Overrides/tt_content.php
<?php

use TYPO3\CMS\Core\Utility\ExtensionManagementUtility;

// Plain plugin without Extbase controller
ExtensionManagementUtility::addPlugin(
  [
    'My Plugin Title',
    'my_plugin',
    'my-extension-icon',
  ],
  'FILE:EXT:my_extension/Configuration/FlexForms/MyFlexform.xml',
);
Copied!

Plain plugins can use any name scheme for the identifiers that they desire.

When a content element containing a FlexForm is saved the settings are written as XML to column tt_content.pi_flexform in the according database record.

See also: Read FlexForms values in PHP.

For example the carousel of the extension bk2k/bootstrap-package uses FlexForms for its configuration.