Skip to main content

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 name
  • id(?string $id) - Set field ID
  • class(?string $class) - Set CSS class
  • placeholder(?string $placeholder) - Set placeholder text (for first option)
  • value(mixed $value) - Set selected value(s)

Common Properties

  • required() - Make field required
  • disabled() - Disable the field
  • readonly() - Make field readonly
  • autofocus() - Auto-focus on page load
  • multiple() - Enable multiple selection

Field Labels

  • label(?string $label) - Set field label
  • info(?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>