Skip to main content

FormBuilder

The FormBuilder class provides a fluent API for building forms programmatically. It allows you to set form attributes, add tabs, groups, and custom fields through a clean, chainable interface.

Namespace​

JobMetric\Form\FormBuilder

Overview​

The FormBuilder is the entry point for creating forms. It provides methods to configure form attributes (action, method, enctype, etc.), add tabs with groups and fields, and build a Form instance ready for rendering or serialization.

Static Methods​

Make​

Create a new form builder instance:

$builder = FormBuilder::make();

Returns: FormBuilder - A new form builder instance

Form Attributes​

Action​

Set the form action URL:

$builder->action('/users');

Parameters:

  • $action (string): The form action URL

Returns: static - Returns the builder for method chaining

Method​

Set the form method:

$builder->method('POST');

Parameters:

  • $method (string): The HTTP method (GET, POST, PUT, PATCH, DELETE)

Returns: static - Returns the builder for method chaining

Default: POST

Name​

Set the form name attribute:

$builder->name('user-form');

Parameters:

  • $name (string): The form name

Returns: static - Returns the builder for method chaining

Default: form

Enctype​

Set the form enctype:

$builder->enctype('multipart/form-data');

Parameters:

  • $enctype (string): The form enctype. Must be one of:
    • application/x-www-form-urlencoded (default)
    • multipart/form-data
    • text/plain

Returns: static - Returns the builder for method chaining

Throws: InvalidArgumentException - If an invalid enctype is provided

Autocomplete​

Enable autocomplete for the form:

$builder->autocomplete();

Returns: static - Returns the builder for method chaining

Target​

Set the form target:

$builder->target('_blank');

Parameters:

  • $target (string): The form target. Must be one of:
    • _self (default)
    • _blank
    • _parent
    • _top

Returns: static - Returns the builder for method chaining

Throws: InvalidArgumentException - If an invalid target is provided

Novalidate​

Disable HTML5 validation:

$builder->novalidate();

Returns: static - Returns the builder for method chaining

Class​

Set the form CSS class:

$builder->class('my-custom-form');

Parameters:

  • $class (string): The CSS class

Returns: static - Returns the builder for method chaining

Default: form d-flex flex-column flex-lg-row

ID​

Set the form ID attribute:

$builder->id('user-form-id');

Parameters:

  • $id (string): The form ID

Returns: static - Returns the builder for method chaining

Default: form

Remove CSRF​

Disable CSRF token:

$builder->removeCsrf();

Returns: static - Returns the builder for method chaining

Default: CSRF is enabled

Adding Content​

Hidden Custom Fields​

Add hidden fields to the form:

$builder->hiddenCustomField(function ($field) {
$field->hidden()
->name('user_id')
->value(123)
->build();
});

Parameters:

  • $callable (Closure|array): A closure that receives a CustomFieldBuilder instance, or an array of field configurations

Returns: static - Returns the builder for method chaining

Tabs​

Add tabs to the form:

$builder->tab(function ($tab) {
$tab->id('personal')
->label('Personal Information')
->group(function ($group) {
$group->label('Basic Info')
->customField(function ($field) {
$field->text()
->name('name')
->label('Name')
->build();
})
->build();
})
->build();
});

Parameters:

  • $callable (Closure|array): A closure that receives a TabBuilder instance, or an array of tab configurations

Returns: static - Returns the builder for method chaining

Throws: Throwable - If tab building fails

Building​

Build​

Build the form instance:

$form = $builder->build();

Returns: Form - The built form instance

Utility Methods​

GetAll Custom Fields​

Get all custom fields from the form (including hidden fields and fields in tabs):

$fields = $builder->getAllCustomFields(true);

Parameters:

  • $includeHidden (bool): Whether to include hidden fields (default: true)

Returns: CustomField[] - Array of custom field instances

Complete Examples​

Simple Form​

use JobMetric\Form\FormBuilder;

$form = FormBuilder::make()
->action('/users')
->method('POST')
->name('user-form')
->tab(function ($tab) {
$tab->id('personal')
->label('Personal Information')
->group(function ($group) {
$group->label('Basic Info')
->customField(function ($field) {
$field->text()
->name('name')
->label('Full Name')
->required()
->build();
})
->customField(function ($field) {
$field->email()
->name('email')
->label('Email Address')
->required()
->build();
})
->build();
})
->build();
})
->build();

Complex Form with Multiple Tabs​

$form = FormBuilder::make()
->action('/products')
->method('POST')
->enctype('multipart/form-data')
->name('product-form')
->tab(function ($tab) {
$tab->id('basic')
->label('Basic Information')
->selected()
->group(function ($group) {
$group->label('Product Details')
->customField(function ($field) {
$field->text()
->name('name')
->label('Product Name')
->required()
->build();
})
->customField(function ($field) {
$field->number()
->name('price')
->label('Price')
->required()
->min(0)
->build();
})
->build();
})
->build();
})
->tab(function ($tab) {
$tab->id('media')
->label('Media')
->group(function ($group) {
$group->label('Images')
->customField(function ($field) {
$field->image()
->name('main_image')
->label('Main Image')
->build();
})
->build();
})
->build();
})
->build();

Form with Hidden Fields​

$form = FormBuilder::make()
->action('/orders')
->method('POST')
->hiddenCustomField(function ($field) {
$field->hidden()
->name('user_id')
->value(auth()->id())
->build();
})
->hiddenCustomField(function ($field) {
$field->hidden()
->name('order_type')
->value('online')
->build();
})
->tab(function ($tab) {
$tab->id('details')
->label('Order Details')
->group(function ($group) {
$group->label('Information')
->customField(function ($field) {
$field->text()
->name('notes')
->label('Notes')
->build();
})
->build();
})
->build();
})
->build();

When to Use FormBuilder​

Use FormBuilder when you need to:

  • Programmatic Form Creation: Build forms programmatically instead of writing HTML manually
  • Complex Form Structures: Create forms with tabs, groups, and multiple field types
  • Consistent Form Structure: Ensure all forms follow the same structure and styling
  • Dynamic Forms: Build forms based on configuration, database data, or user input
  • API Integration: Export form definitions for frontend frameworks or API responses
  • Maintainable Code: Keep form logic organized and easy to maintain