Feedback & Surveys template
Let trainees rate a session and its trainer
Import a Laravel training feedback form template for Filament, then route session ratings and recommendations to the right trainer.
Updated
Import this Laravel training feedback form template when trainees need a short way to rate one completed session and its trainer. The imported template gives your application a consistent feedback flow for every cohort, while keeping each response attached to the session your team ran.
After a trainee submits it, FilaForms stores the response in your application's database and emits a submission event. Your Laravel code can use that event to send the course name, overall rating, and recommendation response to the person responsible for the training. That is a useful fit for an internal LMS or corporate learning tool built with a Laravel form builder for Filament.
The field table below covers the response data that the template renders. Its grouping keeps the trainee focused on the session experience before asking for an overall judgment. This matters when a poor rating needs follow-up. The training owner can see whether the response relates to the course, the trainer, or a mismatch between the session and its audience.
Fields in this template (10 fields, 5 required)
Field types used: Text, Date, Radio, Toggle Buttons, Textarea, Toggle. Every field is editable in the builder after import.
Session
| Field | Type | Required | Validation |
|---|---|---|---|
Course Name
course_name
|
Text | Yes |
required |
Session Date
session_date
|
Date | Yes |
required |
Trainer
trainer
|
Text | No | none |
Format
format
|
Radio, 3 options | No | none |
Your Rating
| Field | Type | Required | Validation |
|---|---|---|---|
Overall Rating
overall_rating
|
Radio, 4 options | Yes |
required |
Content Was Relevant
relevance
|
Radio, 4 options | Yes |
required |
Pace
pace
|
Toggle Buttons, 3 options | Yes |
required |
What Worked Well?
worked_well
|
Textarea | No | none |
What Would You Change?
improvements
|
Textarea | No | none |
I would recommend this training
would_recommend
|
Toggle | No | none |
Route feedback and improve the next session
Laravel 12 discovers listeners in app/Listeners automatically. A listener gives your application one place to decide who receives a response. The example maps a template form to a training mailbox. Replace the mailbox values with addresses that belong to the people who own those sessions.
<?php
declare(strict_types=1);
namespace App\Listeners;
use FilaForms\Core\Events\FormSubmitted;
use Illuminate\Mail\Message;
use Illuminate\Support\Facades\Mail;
final class SendTrainingFeedback
{
public function handle(FormSubmitted $event): void
{
$recipients = [
1 => 'training-team@example.test',
];
$recipient = $recipients[$event->form->getKey()] ?? 'training-team@example.test';
$courseName = (string) ($event->submission->data['course_name'] ?? 'Training session');
$overallRating = (string) ($event->submission->data['overall_rating'] ?? 'Not provided');
$wouldRecommend = (string) ($event->submission->data['would_recommend'] ?? 'Not provided');
Mail::raw(
"Course: {$courseName}\nOverall rating: {$overallRating}\nWould recommend: {$wouldRecommend}",
function (Message $message) use ($recipient, $courseName): void {
$message->to($recipient)->subject("Training feedback: {$courseName}");
},
);
}
}
Keep the recipient mapping close to the training ownership data in your application. A fixed mapping works for a small program with a few recurring sessions. A training catalog can instead resolve the owner before the form is shown, then send the owner a notification after submission. The event listener remains the boundary between collected feedback and the operational response.
Avoid treating one response as a verdict on a trainer. A single low rating can reveal a useful issue. It can also reflect a difficult cohort, a required course, or a session held at the wrong time. Route low ratings to the training owner first. They can inspect the session context before changing course material or deciding that a trainer needs support.
ATD Research, as cited by Devlin Peck in 2025, found that 71% of organizations use the Kirkpatrick model to evaluate training. Use the rating as one signal in that evaluation. Pair it with the learning objective for the session and the follow-up action your team can take. The submission dashboard gives staff a place to review individual responses, while the listener handles the immediate alert.
For a self-paced course, remove the trainer field because there is no live instructor to assess. Add a self_paced_module code so every response identifies the module that a learner completed. That variation keeps the same session-focused feedback pattern. It also prevents reports from implying that an instructor caused an issue in material that learners completed independently.
Use the course name to distinguish repeated offerings of the same program. A course can have different outcomes when its audience, examples, timing, or trainer changes. If your application already has session records, connect the surrounding workflow to that record. You can then use your own reporting queries to compare feedback across dates or cohorts without changing the imported form for each session.
This template is not a training analytics system. It captures feedback for one session. It does not calculate a trainer's average score across sessions or track completion rates over time. Build those measures from your training records and stored submissions when your program needs longitudinal reporting.
The form suits teams that need feedback to stay inside the application they operate. It also works well when the next step is a Laravel notification, a support task, or an internal review. Review the FilaForms feature set when you need the surrounding submission dashboard, visual builder, and notification workflow in the same Filament panel.
Use this template in your own application
With FilaForms installed, one call creates the form with every field, rule, and setting listed above. Then edit it in the builder.
use FilaForms\Core\Support\FormTemplates;
$form = FormTemplates::createFormFromTemplate('training-feedback');
Template schema (JSON)
{
"name": "Training Feedback Form",
"description": "Rate a training session and its trainer",
"icon": "heroicon-o-academic-cap",
"category": "Feedback & Surveys",
"popularity": "Medium",
"sections": [
{
"name": "Session",
"fields": [
{
"label": "Course Name",
"type": "text",
"code": "course_name",
"required": true,
"width": "50"
},
{
"label": "Session Date",
"type": "date",
"code": "session_date",
"required": true,
"width": "50"
},
{
"label": "Trainer",
"type": "text",
"code": "trainer",
"required": false,
"width": "50"
},
{
"label": "Format",
"type": "radio",
"code": "format",
"required": false,
"options": [
{
"value": "In person"
},
{
"value": "Virtual"
},
{
"value": "Self paced"
}
],
"width": "50"
}
]
},
{
"name": "Your Rating",
"fields": [
{
"label": "Overall Rating",
"type": "radio",
"code": "overall_rating",
"required": true,
"options": [
{
"value": "Excellent"
},
{
"value": "Good"
},
{
"value": "Average"
},
{
"value": "Poor"
}
],
"width": "50"
},
{
"label": "Content Was Relevant",
"type": "radio",
"code": "relevance",
"required": true,
"options": [
{
"value": "Strongly agree"
},
{
"value": "Agree"
},
{
"value": "Neutral"
},
{
"value": "Disagree"
}
],
"width": "50"
},
{
"label": "Pace",
"type": "toggle-buttons",
"code": "pace",
"required": true,
"options": [
{
"value": "Too slow"
},
{
"value": "Just right"
},
{
"value": "Too fast"
}
],
"width": "100"
},
{
"label": "What Worked Well?",
"type": "textarea",
"code": "worked_well",
"required": false,
"width": "100"
},
{
"label": "What Would You Change?",
"type": "textarea",
"code": "improvements",
"required": false,
"width": "100"
},
{
"label": "I would recommend this training",
"type": "toggle",
"code": "would_recommend",
"required": false,
"default": true,
"width": "100"
}
]
}
]
}
Frequently asked questions
- Can this template notify the trainer after feedback is submitted?
- Yes. A Laravel listener can read the submitted ratings and route each form's feedback to its trainer or training owner.
- How should I adapt the form for self-paced training?
- Remove the trainer field and add a self_paced_module code, so each response identifies the asynchronous module being reviewed.
- Does this template calculate trainer averages or completion rates?
- No. The template captures feedback for one session. It does not calculate trainer averages across sessions or track completion rates over time.
- What should happen when a rating signals a problem?
- Route low ratings to the training owner, then review the session context before changing course material or trainer support.