Back to blog

FilaForms vs Building Forms from Scratch in Laravel

Manuk Minasyan · · 6 min read

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:

#When FilaForms makes more sense

Use FilaForms when:

#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.

Related posts