Search by

nowo-tech / contact-form-bundle

HecFranco

Symfony bundle for configurable multilingual contact forms with GDPR compliance, customizable fields, client association, and admin CRUD.

Package info

github.com/nowo-tech/ContactFormBundle

Type:symfony-bundle

pkg:composer/nowo-tech/contact-form-bundle

Fund package maintenance!

HecFranco

Statistics

Installs: 111

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 1

v1.6.4 2026-11-10 13:04 UTC

README

CI Packagist Version Packagist Downloads License PHP Symfony GitHub stars Coverage

⭐ Found this useful? Install from Packagist · Give it a star on GitHub so more developers can find it.

Contact Form Bundle — configurable multilingual contact forms with GDPR consent, customizable fields (email, phone, text, textarea, select), optional client association, anonymous submissions, and admin CRUD. For Symfony 7.4+ and 8 · PHP 8.2+.

FrankenPHP Friendly Worker Mode

This bundle is FrankenPHP worker mode friendly, including when the kernel is not reset between requests (reset_kernel / services resetter off). Audit: docs/FRANKENPHP-WORKER-AUDIT.md.

Public multilingual contact form with phone prefix, topic select and GDPR consent
Public form — phone prefix, topic select, GDPR consent
Admin submissions inbox with view and delete row actions
Admin inbox — submissions per form (UiKit list)
Submission detail with metadata, submitted values and delete action
Submission detail — consent date and submitted values

Features

  • ✅ Admin CRUD for form definitions, customizable fields, and submissions
  • ✅ Multilingual copy via translation entities (title, labels, GDPR text, success message)
  • ✅ Customizable fields: text, email, phone, textarea, select (options per field)
  • ✅ GDPR: required consent checkbox, privacy policy link, IP anonymization, retention days
  • ✅ Client association: optional link to an existing host client entity or anonymous submissions
  • ✅ Public form at /{_locale}/contact/{slug} with PRG flow and flash success message
  • ✅ UiKit page contract (REQ-UI-003): admin pages on UiKit list / form / wizard / show scaffolds, public form on the guest layout — your layout and CSS stack once in nowo_ui_kit, no template copies; deletes through the UiKit confirm dialog
  • ✅ Override Twig templates (per page via web_ui.templates) and translations from your application
  • ✅ Pluggable notifications (custom notifier, Symfony Mailer, or ContactSubmissionCreatedEvent)
  • ✅ GDPR retention cleanup via nowo:contact-form:cleanup-submissions

Installation

composer require nowo-tech/contact-form-bundle

Register in config/bundles.php if Flex recipe is not applied:

Nowo\ContactFormBundle\NowoContactFormBundle::class => ['all' => true],

Import routes in config/routes.yaml:

nowo_contact_form:
    resource: '@NowoContactFormBundle/Resources/config/routes.yaml'

Run Doctrine migrations after mapping entities (bundle registers ORM mappings automatically).

Requirements

  • PHP 8.2+
  • Symfony 7.4+ or 8.0+
  • Doctrine ORM 2.17+ or 3.x
  • UiKitBundle ^2.15.3 and FormKitBundle ^2.13.3 (pulled transitively); set nowo_ui_kit.layouts to your layout (Configuration)
  • twig/extra-bundle + twig/string-extra (pulled transitively)

Demo

make -C demo/symfony8 up

Default URL: http://localhost:8021 (see demo .env.example for PORT). The demo seeds three forms and a small submissions inbox (app:seed-contact-demo) and renders every page through its UiKit host layouts (templates/layouts/).

Playwright e2e and the README screenshots (REQ-DEMO-013): make test-e2e, make demo-screenshots (see CONTRIBUTING).

FrankenPHP worker mode: default is FRANKENPHP_MODE=worker (see .env.example). Set classic for per-request PHP / easier hot-reload, then recreate the container (docker compose up -d). Details: docs/DEMO-FRANKENPHP.md.

Development

make up
make test
make qa
make release-check

Documentation

Additional documentation

Tests and coverage

Language Coverage
PHP 100% line coverage of src/ (no exclusions; make test-coverage / CI fail below 100%). See docs/COVERAGE.md.
TS/JS N/A
Python N/A

License & author

MIT · Nowo.tech · Héctor Franco Aceituno