FilaForms vs Building Forms from Scratch in Laravel
FilaForms vs Building Forms from Scratch in Laravel
You've built forms in Laravel before. You know the routine: create a migration, write a Blade template, add validation in the controller, wire up the routes, maybe add some JavaScript for conditional fields. It works. But the fifth time you're building a contact form with slightly different fields, you start wondering if there's a faster way.
That's the decision this post is about. When does it make sense to build forms by hand in Laravel, and when should you reach for something like FilaForms?
#What "building from scratch" actually looks like
Let's say you need a contact form. Name, email, message, a dropdown for the department, and a file upload for attachments. Here's the manual approach:
First, the migration and model:
Schema::create('contact_submissions', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('email');
$table->text('message');
$table->string('department');
$table->string('attachment')->nullable();
$table->timestamps();
});
Then a form request for validation:
class ContactFormRequest extends FormRequest
{
public function rules(): array
{
return [
'name' => ['required', 'string', 'max:255'],
'email' => ['required', 'email'],
'message' => ['required', 'string'],
'department' => ['required', 'in:sales,support,billing'],
'attachment' => ['nullable', 'file', 'max:10240'],
];
}
}
Then the controller:
class ContactController extends Controller
{
public function store(ContactFormRequest $request)
{
$data = $request->validated();
if ($request->hasFile('attachment')) {
$data['attachment'] = $request->file('attachment')
->store('attachments', 'public');
}
ContactSubmission::create($data);
// Send notification email
Mail::to(config('mail.admin'))->send(new ContactNotification($data));
return back()->with('success', 'Message sent.');
}
}
Then the Blade template with error handling, CSRF, file upload encoding, styling. Then a Mailable class for the notification. Then routes.
For one form, this is maybe 2-3 hours of work for an experienced Laravel developer. Totally reasonable.
Now imagine your client asks for a survey form next week. Then an order form. Then they want to tweak the contact form fields without waiting for a deploy. That 2-3 hours starts multiplying, and the real cost isn't the initial build. It's the maintenance and the back-and-forth every time someone wants to change a dropdown option.
#What the same form looks like with FilaForms
With FilaForms, you install the package and build that same contact form in the Filament admin panel. Drag in text fields for name and email, a textarea for the message, a select dropdown for department, and a file upload. Set your validation rules in the UI. Done.
composer require filaforms/core
No migration to write. No controller. No Blade template. The form gets a public URL you can share or embed with Livewire:
<livewire:filaforms::form-renderer :form="$form" />
Submissions show up in your Filament panel with export options. Email notifications are configured in the UI. If someone wants to add a field or change a dropdown option, they do it themselves in the form builder. No code change, no deploy.
The tradeoff is that you're working within FilaForms' system. You get 25+ field types, conditional logic, multi-step wizards, and file uploads out of the box. But if you need something that doesn't fit those building blocks, you'll need to extend it with custom field types.
#Side-by-side comparison
| Building from scratch | FilaForms | |
|---|---|---|
| Time for first form | 2-3 hours | 15-30 minutes |
| Time for each additional form | 1-2 hours | 10-20 minutes |
| Field changes | Code change + deploy | UI edit, instant |
| Conditional logic | Custom JavaScript | Built-in, 8 operators |
| Multi-step forms | Build from scratch | Toggle in settings |
| File uploads | Manual storage config | Configured per field |
| Submissions management | Build admin UI or use database | Built-in with CSV/Excel export |
| Analytics | Add tracking yourself | Views, starts, completion rate |
| Email notifications | Write Mailable classes | Toggle in form settings |
| Spam protection | Add package (honeypot, reCAPTCHA) | Honeypot built in |
| Public sharing | Configure routes | ULID URL auto-generated |
| Customization ceiling | Unlimited | Extensible via custom field types and hooks |
#When to build from scratch
Build your forms manually when:
- The form is deeply integrated with your domain logic. A checkout flow that calculates tax, validates inventory, and processes payments in specific steps probably shouldn't be abstracted into a form builder.
- You need complete control over the HTML and behavior. If the form is a core part of your product's UX and needs pixel-perfect design, hand-coding gives you that control.
- You have one form that will never change. If it's a single login form or a simple search bar, a form builder is overkill.
#When FilaForms makes more sense
Use FilaForms when:
- You're building multiple forms across a project. Contact forms, surveys, bug reports, feedback forms, order forms. The time savings compound fast.
- Non-developers need to create or edit forms. A marketing team member shouldn't need to file a Jira ticket to change a dropdown option.
- You want submission management without building it. Viewing responses, exporting data, tracking completion rates. That's a lot of code you don't need to write.
- You're already running Filament. FilaForms plugs directly into your existing admin panel. No separate system to maintain.
#The honest tradeoff
Building forms by hand gives you total control. You own every line of code, and nothing is hidden behind an abstraction. For a single, deeply custom form, that's the right call.
But most forms aren't deeply custom. Most forms are variations of the same pattern: collect some fields, validate them, store the submission, send a notification. If that describes what you're building, writing all that boilerplate from scratch every time is just busywork.
FilaForms handles the repetitive parts so you can spend your time on the things that actually need custom code. It requires PHP 8.3+, Laravel 11 or 12, and Filament 5.x. If your stack fits, it's worth trying on your next form-heavy project.
#Frequently Asked Questions
#Is FilaForms faster than building forms manually?
For most forms, yes. A standard contact form takes 2-3 hours to build from scratch in Laravel (migration, controller, validation, Blade view, Mailable). The same form in FilaForms takes 15-30 minutes in the builder. The bigger saving is ongoing — field changes and new form variants take minutes instead of requiring a code deploy.
#Can I migrate existing hand-coded forms to FilaForms?
Yes, but it's a manual process. You recreate the form in the FilaForms builder (fields, validation rules, notifications), then update your routes and views to use the Livewire component instead of your old controller. Submissions start flowing into FilaForms' database. Your old submissions stay in whatever table you were using.
#What's the learning curve for FilaForms?
If you already know Filament, it's minimal — FilaForms uses the same admin panel you're already working in. Expect 30-60 minutes to build your first form and understand the settings. The builder is drag-and-drop with live preview. Most developers are comfortable with it after one form.
#Where to Go from Here
Check out the FilaForms documentation to see if it fits your workflow.