Skip to main content

TabBuilder

The TabBuilder class provides a fluent API for building tabs within forms. Tabs organize form fields into logical sections, improving user experience for complex forms.

Namespace​

JobMetric\Form\Tab\TabBuilder

Overview​

The TabBuilder allows you to create tabs that contain groups and custom fields. Each tab can have an ID, label, description, position, and selected state. Tabs provide a clean way to organize complex forms into manageable sections.

Available Methods​

ID​

Set the tab ID:

$tab->id('personal');

Parameters:

  • $id (string): The tab ID (will be prefixed with 'tab-')

Returns: static - Returns the builder for method chaining

Note: The ID will be automatically prefixed with 'tab-', so id('personal') becomes tab-personal.

Label​

Set the tab label:

$tab->label('Personal Information');

Parameters:

  • $label (string): The tab label

Returns: static - Returns the builder for method chaining

Description​

Set the tab description:

$tab->description('Enter your personal information');

Parameters:

  • $description (string): The tab description

Returns: static - Returns the builder for method chaining

Position​

Set the tab position:

$tab->position('start');

Parameters:

  • $position (string): The tab position. Must be one of:
    • start (default)
    • end

Returns: static - Returns the builder for method chaining

Throws: InvalidArgumentException - If an invalid position is provided

Selected​

Mark the tab as selected (active):

$tab->selected();

Returns: static - Returns the builder for method chaining

Group​

Add a group to the tab:

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

Parameters:

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

Returns: static - Returns the builder for method chaining

Throws: Throwable - If group building fails

Custom Field​

Add a custom field directly to the tab (without a group):

$tab->customField(function ($field) {
$field->text()
->name('name')
->label('Name')
->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

Throws: Throwable - If field building fails

Build​

Build the tab instance:

$tabInstance = $tab->build();

Returns: Tab - The built tab instance

Throws: InvalidArgumentException - If tab ID or label is missing

Complete Examples​

Simple Tab with Group​

$tab = TabBuilder::make()
->id('personal')
->label('Personal Information')
->description('Enter your personal details')
->selected()
->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();

Tab with Multiple Groups​

$tab = TabBuilder::make()
->id('product')
->label('Product Information')
->group(function ($group) {
$group->label('Basic Details')
->customField(function ($field) {
$field->text()
->name('name')
->label('Product Name')
->required()
->build();
})
->build();
})
->group(function ($group) {
$group->label('Pricing')
->customField(function ($field) {
$field->number()
->name('price')
->label('Price')
->required()
->min(0)
->build();
})
->build();
})
->build();

Tab with Direct Fields​

$tab = TabBuilder::make()
->id('settings')
->label('Settings')
->customField(function ($field) {
$field->checkbox()
->name('notifications')
->label('Enable Notifications')
->build();
})
->customField(function ($field) {
$field->select()
->name('theme')
->label('Theme')
->options(function ($opt) {
$opt->label('Light')->value('light')->build();
$opt->label('Dark')->value('dark')->build();
})
->build();
})
->build();

When to Use TabBuilder​

Use TabBuilder when you need to:

  • Organize Complex Forms: Break large forms into manageable sections
  • Improve User Experience: Create tabbed interfaces for better navigation
  • Logical Grouping: Separate form sections by purpose or category
  • Multi-Step Forms: Build wizard-style forms with step-by-step navigation
  • Conditional Display: Show/hide tabs based on user permissions or data