CustomFieldBuilder
The CustomFieldBuilder class provides static methods to create field builders for all available field types. It uses Laravel's macroable trait to dynamically register field type methods.
Namespace
JobMetric\CustomField\CustomFieldBuilder
Overview
The CustomFieldBuilder is the entry point for creating form fields. It provides static methods for each field type (text, select, radio, etc.) that return a field instance ready for configuration.
Available Field Types
The builder supports the following field types:
text()- Text input fieldnumber()- Number input fieldemail()- Email input fieldtel()- Telephone input fieldpassword()- Password input fieldhidden()- Hidden input fieldselect()- Select dropdown fieldradio()- Radio button fieldcheckbox()- Checkbox fielddate()- Date input fielddatetimeLocal()- Date-time local input fieldtime()- Time input fieldweek()- Week input fieldmonth()- Month input fieldcolor()- Color picker fieldrange()- Range slider fieldimage()- Image upload field
Basic Usage
Create a Field
use JobMetric\CustomField\CustomFieldBuilder;
// Text field
$text = CustomFieldBuilder::text()
->name('user[name]')
->label('Name')
->required()
->build();
// Select field
$select = CustomFieldBuilder::select()
->name('country')
->label('Country')
->build();
Build and Render
$field = CustomFieldBuilder::text()
->name('email')
->label('Email')
->required()
->placeholder('Enter your email')
->build();
$html = $field->toHtml();
// Returns: ['body' => '...', 'scripts' => [...], 'styles' => [...]]
echo $html['body'];
Fluent Methods
All field types support fluent method chaining for configuration:
Attributes
$field = CustomFieldBuilder::text()
->name('username')
->id('user-name')
->class('form-control')
->placeholder('Enter username')
->value('john_doe')
->build();
Properties
$field = CustomFieldBuilder::text()
->required()
->disabled()
->readonly()
->autofocus()
->multiple() // For select fields
->build();
Options (Select, Radio, Checkbox)
$select = CustomFieldBuilder::select()
->name('country')
->options(function ($opt) {
$opt->label('Iran')->value('IR')->selected()->build();
$opt->label('Germany')->value('DE')->build();
$opt->label('USA')->value('US')->build();
})
->build();
Data Attributes
$field = CustomFieldBuilder::text()
->name('search')
->data('ajax-url', '/api/search')
->data('min-length', 3)
->build();
Complete Examples
Registration Form
use JobMetric\CustomField\CustomFieldBuilder;
$fields = [
'name' => CustomFieldBuilder::text()
->name('name')
->label('Full Name')
->required()
->placeholder('Enter your full name')
->build(),
'email' => CustomFieldBuilder::email()
->name('email')
->label('Email Address')
->required()
->placeholder('Enter your email')
->build(),
'password' => CustomFieldBuilder::password()
->name('password')
->label('Password')
->required()
->build(),
'country' => CustomFieldBuilder::select()
->name('country')
->label('Country')
->required()
->options(function ($opt) {
$opt->label('Select Country')->value('')->build();
$opt->label('Iran')->value('IR')->build();
$opt->label('Germany')->value('DE')->build();
})
->build(),
];
// Render all fields
foreach ($fields as $field) {
$html = $field->toHtml();
echo $html['body'];
}
Dynamic Form Builder
function buildField(array $config) {
$builder = CustomFieldBuilder::{$config['type']}();
$builder->name($config['name'])
->label($config['label'] ?? null);
if ($config['required'] ?? false) {
$builder->required();
}
if (isset($config['options'])) {
$builder->options(function ($opt) use ($config) {
foreach ($config['options'] as $option) {
$opt->label($option['label'])
->value($option['value']);
if ($option['selected'] ?? false) {
$opt->selected();
}
$opt->build();
}
});
}
return $builder->build();
}