Select Field
The select field provides a dropdown menu for selecting one or multiple options from a list. It's perfect for choices like countries, categories, statuses, and any scenario where users need to pick from predefined options.
Namespace
JobMetric\CustomField\CustomFields\Select\Select
Overview
The select field renders as an HTML <select> element with <option> children. It supports single and multiple selection modes, making it versatile for various selection scenarios. Options can be defined using closures for complex scenarios or arrays for simple cases.
When to Use
Use the select field when you need:
- Single choice selection - Countries, categories, statuses
- Multiple choice selection - Tags, permissions, features
- Predefined options - Any scenario with a fixed list of choices
- Hierarchical data - Categories with subcategories
- Form dropdowns - Any dropdown selection in forms
Example scenarios:
- Country/region selection
- Category selection (products, posts)
- Status selection (active, inactive, pending)
- Multi-select tags
- Permission selection
- Language selection
Builder Method
CustomFieldBuilder::select()
Available Methods
Common Attributes
name(string $name, ?string $uniq = null)- Set field nameid(?string $id)- Set field IDclass(?string $class)- Set CSS classplaceholder(?string $placeholder)- Set placeholder text (for first option)value(mixed $value)- Set selected value(s)
Common Properties
required()- Make field requireddisabled()- Disable the fieldreadonly()- Make field readonlyautofocus()- Auto-focus on page loadmultiple()- Enable multiple selection
Field Labels
label(?string $label)- Set field labelinfo(?string $info)- Set help/info text
Options
options(Closure|array $options)- Define select options
Validation
validation(array|string $rules)- Set validation rules
Basic Example
use JobMetric\CustomField\Facades\CustomFieldBuilder;
$select = CustomFieldBuilder::select()
->name('country')
->label('Country')
->info('Select your country')
->required()
->placeholder('Choose a country')
->options(function ($opt) {
$opt->label('Iran')->value('IR')->selected()->build();
$opt->label('Germany')->value('DE')->build();
$opt->label('United States')->value('US')->build();
})
->build();
$result = $select->toHtml();
echo $result['body'];
Advanced Examples
Array Options
$select = CustomFieldBuilder::select()
->name('language')
->label('Language')
->options([
['label' => 'English', 'value' => 'en', 'selected' => true],
['label' => 'Persian', 'value' => 'fa'],
['label' => 'German', 'value' => 'de'],
])
->build();
Multiple Selection
$select = CustomFieldBuilder::select()
->name('tags')
->label('Tags')
->info('Select one or more tags')
->multiple()
->options(function ($opt) {
$opt->label('PHP')->value('php')->build();
$opt->label('Laravel')->value('laravel')->selected()->build();
$opt->label('JavaScript')->value('js')->build();
$opt->label('Vue.js')->value('vue')->build();
})
->build();
With Validation
$select = CustomFieldBuilder::select()
->name('status')
->label('Status')
->required()
->validation(['required', 'in:active,inactive,pending'])
->options([
['label' => 'Active', 'value' => 'active'],
['label' => 'Inactive', 'value' => 'inactive'],
['label' => 'Pending', 'value' => 'pending'],
])
->build();
Dynamic Options from Database
$categories = Category::all();
$select = CustomFieldBuilder::select()
->name('category_id')
->label('Category')
->options(function ($opt) use ($categories) {
foreach ($categories as $category) {
$opt->label($category->name)
->value($category->id)
->build();
}
})
->build();
With Pre-selected Value
$select = CustomFieldBuilder::select()
->name('country')
->label('Country')
->value('IR') // Pre-select Iran
->options(function ($opt) {
$opt->label('Iran')->value('IR')->build();
$opt->label('Germany')->value('DE')->build();
})
->build();
Rendering
HTML Output
$result = $select->toHtml();
// $result contains:
// [
// 'body' => '<select>...</select>',
// 'scripts' => [],
// 'styles' => []
// ]
echo $result['body'];
Array Output
$array = $select->toArray();
// Returns complete field configuration including options
HTML Output
The select field renders as:
<select name="country" id="country" class="form-select" required>
<option value="">Choose a country</option>
<option value="IR" selected>Iran</option>
<option value="DE">Germany</option>
<option value="US">United States</option>
</select>
For multiple selection:
<select name="tags[]" id="tags" class="form-select" multiple>
<option value="php">PHP</option>
<option value="laravel" selected>Laravel</option>
<option value="js">JavaScript</option>
</select>
Related Documentation
- Option Builder - Learn how to build options
- Option - Understanding option structure
- Field Properties - Multiple selection and other properties
- CustomFieldBuilder - Builder API reference