Core Features

Submissions

View, manage, and export form submissions.

Every form submission is stored as a FormSubmission record with the respondent's data, timestamp, and optional user association.

Data Structure

Submission data is stored as JSON in the data column:

{
    "custom_fields": {
        "name": "Jane Doe",
        "email": "jane@example.com",
        "category": ["option1", "option2"]
    }
}

Sequential Numbers

When the SUBMISSION_SEQUENTIAL_NUMBER feature flag is enabled, each submission receives an auto-incrementing number scoped to the form. Useful for human-readable reference numbers (e.g., "Submission #42").

Anonymous vs Authenticated

Submissions track user_id for logged-in users and session_fingerprint for anonymous visitors.

Usage
$submission->isAnonymous(); // true if no user_id

Viewing Submissions

Submissions are listed in the admin panel under each form. The table renders dynamic columns based on the form's field schema. Columns are searchable, sortable, and filterable based on each field type's capabilities.

Export

CSV and Excel export is available via Filament's built-in exporter.

Exported files include:

ColumnSource
Submission numberSequential number (if enabled)
Submission IDULID
UserUser name or "Guest" for anonymous submissions
Submitted atTimestamp
Form field valuesOne column per form field

Success and failure notifications are shown with row counts after the export completes.

Submission Limits

OptionDescription
onePerPersonLimit to one submission per user. Checks user_id for authenticated users, session_fingerprint for anonymous visitors.
maxSubmissionsGlobal cap on total submissions for the form. No new submissions are accepted after the limit is reached.

Events

The FormSubmitted event is dispatched after each successful submission. It contains the Form and FormSubmission models.

app/Listeners/HandleFormSubmission.php
use FilaForms\Core\Events\FormSubmitted;
use Illuminate\Support\Facades\Event;

Event::listen(FormSubmitted::class, function (FormSubmitted $event) {
    $form = $event->form;
    $submission = $event->submission;

    // Custom processing logic
});
Integrations (webhooks, Google Sheets, Stripe, etc.) listen to this event internally. You can add your own listeners alongside them without interference.

Submission Processing

ProcessFormSubmissionAction handles the full submission lifecycle inside a database transaction:

Validate and Store

The submission data is validated against the form schema and stored in the form_submissions table.

Transform Field Values

Field types can transform raw input via processSubmissionValue(). For example:

  • Signature fields convert base64 data to an image file on disk
  • File upload fields move temporary uploads to permanent storage paths

Dispatch Events

The FormSubmitted event is dispatched, triggering notifications and integrations.

Copyright © 2026