liquidlight / typo3-form-to-database
Extends the TYPO3 form with a database finisher, to save every form-result in the database.
Package info
github.com/liquidlight/typo3-form-to-database
Type:typo3-cms-extension
pkg:composer/liquidlight/typo3-form-to-database
Requires
- php: ^8.2 || ^8.3 || ^8.4
- ext-json: *
- typo3/cms-backend: ^13.4.20
- typo3/cms-core: ^13.4.20
- typo3/cms-extbase: ^13.4.20
- typo3/cms-fluid: ^13.4.20
- typo3/cms-form: ^13.4.20
- typo3/cms-frontend: ^13.4.20
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.64
- helhum/typo3-console: ^8.2
- helmich/typo3-typoscript-lint: ^3.2
- mpdf/mpdf: ^8.2
- nikic/php-parser: ^5.3
- saschaegerer/phpstan-typo3: ^1.10
- typo3/cms-install: ^13.4
- typo3/cms-tstemplate: ^13.4
- typo3/testing-framework: ^9.0
Suggests
- mpdf/mpdf: Allows downloading form results as a PDF
Provides
None
Conflicts
None
Replaces
- dev-main
- 5.3.1
- 5.3.0
- 5.2.1
- 5.2.0
- 5.1.0
- 5.0.2
- 5.0.1
- 5.0.0
- 4.4.2
- 4.4.1
- 4.4.0
- 4.3.1
- 4.3.0
- 4.2.3
- 4.2.2
- 4.2.1
- 4.2.0
- 4.1.0
- 4.0.0
- 3.3.1
- 3.3.0
- 3.2.4
- 3.2.3
- 3.2.2
- 3.2.1
- 3.2.0
- 3.1.0
- 3.0.1
- 3.0.0
- 2.3.0
- 2.2.6
- 2.2.5
- 2.2.4
- 2.2.3
- 2.2.2
- 2.2.1
- 2.2.0
- 2.1.2
- 2.1.1
- 2.1.0
- 2.0.4
- 2.0.3
- 2.0.2
- 2.0.1
- 2.0.0
- 1.0.5
- 1.0.4
- 1.0.3
- 1.0.2
- 1.0.1
- 1.0.0
- dev-20-support-of-typo3-14
- dev-version/5.x
- dev-version/4.x
- dev-version/3.x
- dev-version/2.x
This package is auto-updated.
Last update: 2026-09-04 10:44:54 UTC
README
This extension adds an additional finisher to the TYPO3 Form (tx_form) to save the results into the database
- GitHub Repository: github.com/liquidlight/typo3-form-to-database
- TYPO3 Extension Repository: extensions.typo3.org/extension/form_to_database
- Found an issue?: github.com/liquidlight/typo3-form-to-database/issues
composer req liquidlight/typo3-form-to-database
Compatibility
| Form to Database | TYPO3 Version |
|---|---|
| 6.x | 14.0 |
| 5.x | 13.4 |
| 4.x | 12.4 |
| 3.x | 11.5 |
| 2.x | 9.5 - 10.4 |
Database-stored forms (TYPO3 v14+)
As of 6.0.0, this extension supports forms stored in TYPO3 v14's new database storage
(form_definition table) as well as the traditional file-based (.form.yaml) storage — results,
CSV/PDF export, and deletion/restoration all work for both.
One limitation is inherited directly from TYPO3 core, not specific to this extension:
database-stored forms currently have no per-editor-group permission isolation equivalent to
file-mount access control — any backend user with form_definition table access can see all
database-stored forms. If your installation relies on separating which forms different editor
groups can see, keep using file-based storage until TYPO3 core adds an equivalent permission
mechanism for database storage.
Introduction
Features
- No configuration needed
- No database-changes per form required
- Shows all results per form in a separate backend module
- Provides a CSV-download of all results
- Preview & PDF download of individual form results
- Automatic deletion of results after a specified number of days (GDPR)
Screenshots
Backend Overview
Backend Results
Installation & setup
composer req liquidlight/typo3-form-to-database(or download from the TYPO3 Extension Repository)- Add the extension as a dependency in your site as a site set
- Edit the form you wish to store results for
- Add the finisher ("Save the mail to the Database") to your form - it is recommended you place this finisher first
The recommended way to install the extension is by using Composer. In your Composer based
TYPO3 project root run composer req liquidlight/typo3-form-to-database.
Installation from TYPO3 Extension Repository (TER)
Download and install the extension form_to_database with the extension manager module.
Setup & Usage
Finisher
To start storing form results:
- Install the extension
- Edit the form you wish to store results for
- Add the finisher ("Save the mail to the Database") to your form - it is recommended you place this finisher first
Command / Scheduler
It's possible to delete the form results by the command line or scheduler (Execute console commands).
Usage: form_to_database:deleteFormResults [<maxAge>] Arguments: maxAge Maximum age of form results in days [default: 90]
Options
There are several options available for customisation. To change these, go to Settings -> Configure Extensions -> form_to_database
- General
hideLocationInList- Should the location of the form be hidden on the Form results overview module? (Default: No)displayActiveFieldsOnly- If true will only output active renderables in backendModule and CSV (will not display deleted renderables stored in the formDefinition) (Default: false)
- CSV Settings
csvDelimiter- What character should separate fields in the CSV export (Default:,)csvOnlyFilenameOfUploadFields- Should the CSV list the whole path or just the file name?csvHtmlSpecialChars- If true will encode special chars ('=>",<=><) (Default: true)
Additional Feature configuration
PDF download of a single result
Details
Each form response can be downloaded as a PDF which can be customised in TypoScript if mPDF is installed.
TO utilise this feature, install mPDF as an additional dependency
composer req mpdf/mpdf
Settings can be directly passed in to mPDF by using
module.tx_formtodatabase_web_formtodatabaseformresults.settings.pdf.config
The defaults are the following, however they can be overwritten:
'default_font_size' => '12',
'format' => 'A4',
'orientation' => 'P',
'margin_left' => '15',
'margin_right' => '15',
'margin_bottom' => '15',
'margin_top' => '15',
'tempDir' => Environment::getVarPath() . '/form_to_database'
Stylesheets
If you wish to pass in a custom CSS stylesheet, you can do so with the following:
module.tx_formtodatabase_web_formtodatabaseformresults.settings.pdf.stylesheet {
link = EXT:your_extension/Resources/Public/Css/print-form-to-database.css
media = all
}
Letterheads
Letterheads can add information to the top and bottom of each page, it uses SetHTMLHeader and SetHTMLFooter directly.
This means all the mPDF variables are accessible. These can be added via TypoScript (letterheads.header and letterheads.footer). For example:
module.tx_formtodatabase_web_formtodatabaseformresults.settings.pdf.letterheads.footer (
<table class="footer"><tr><td>Form to Database - {PAGENO}/{nbpg}</td></tr></table>
)
Contribute
We welcome issues and merge/pull requests. Please don't let conventions or failing tests put you off - we can always fix them once a request is submitted.
Please create an issue at https://github.com/liquidlight/typo3-form-to-database/issues.
Please follow the TYPO3 Commit conventions if you can when committing.
Please use GitLab only for bug-reporting or feature-requests. For support use the TYPO3 community channels
To run tests & linting
The extension uses a modified version of runTests.sh from the TYPO3 core.
You need Podman installed and running to run the tests.
- Install dependencies with TYPO3 14 and php 8.2:
Build/Scripts/runTests.sh -t 14 -p 8.2 -s composer install(-t is currently obsolete, as only v14 is supported and set as default)
- Run linter:
Build/Scripts/runTests.sh -p 8.2 -s lintPhpBuild/Scripts/runTests.sh -t 14 -p 8.2 -s lintTypoScript
- Execute functional tests:
Build/Scripts/runTests.sh -p 8.2 -s functional
See help menu for all options: Build/Scripts/runTests.sh --help
Commits should follow TYPO3 Commit Guidelines.
To manually test the backend module in a browser
The repository ships a DDEV setup for spinning up a real, browsable TYPO3 instance:
ddev start ddev composer install ddev init-typo3
ddev init-typo3 sets up a fresh TYPO3 instance and seeds it with a database-stored and a file-stored demo form (each with a couple of form results), so the "Form results" backend module has something to show immediately. It's safe to re-run at any time to reset back to a clean state. It prints the backend URL and admin login on completion:
- Backend:
https://typo3-form-to-database.ddev.site/typo3/ - Login:
admin/Password123#
Support
If you need private or personal support, try the TYPO3 Slack channel - #ext-form-to-database or contact us by email on info@liquidlight.co.uk.
Be aware that this support might not be free!
Contributors
Big thanks to the following people
- ⭐️ Philipp Mueller - For providing the original code & extension
- Markus Hofmann
- Stig Nørgaard Færch

