Select

# Make

Поле Select включает в себя все базовые методы.

use MoonShine\Fields\Select;
 
//...
 
public function fields(): array
{
return [
Select::make('Country', 'country_id')
->options([
'value 1' => 'Option Label 1',
'value 2' => 'Option Label 2'
])
];
}
 
//...

# Значение по умолчанию

Можно воспользоваться методом default(), если необходимо указать значение по умолчанию для поля.

default(mixed $default)
use MoonShine\Fields\Select;
 
//...
 
public function fields(): array
{
return [
Select::make('Country', 'country_id')
->options([
'value 1' => 'Option Label 1',
'value 2' => 'Option Label 2'
])
->default('value 2')
];
}
 
//...

# Nullable

Как и у всех полей, если необходимо сохранять NULL, то нужно добавить метод nullable()

nullable(Closure|bool|null $condition = null)
use MoonShine\Fields\Select;
 
//...
 
public function fields(): array
{
return [
Select::make('Country', 'country_id')
->options([
'value 1' => 'Option Label 1',
'value 2' => 'Option Label 2'
])
->nullable()
];
}
 
//...

# Placeholder

Метод placeholder() позволяет задать у поля атрибут placeholder.

placeholder(string $value)
use MoonShine\Fields\Select;
 
//...
 
public function fields(): array
{
return [
Select::make('Country', 'country')
->nullable()
->placeholder('Country')
];
}
 
//...

# Группы

Можно объединять значения в группы.

use MoonShine\Fields\Select;
 
//...
 
public function fields(): array
{
return [
Select::make('City', 'city_id')
->options([
'Italy' => [
1 => 'Rome',
2 => 'Milan'
],
'France' => [
3 => 'Paris',
4 => 'Marseille'
]
])
];
}
 
//...

# Выбор нескольких значений

Для выбора нескольких значений необходим метод multiple()

multiple(Closure|bool|null $condition = null)
use MoonShine\Fields\Select;
 
//...
 
public function fields(): array
{
return [
Select::make('Country', 'country_id')
->options([
'value 1' => 'Option Label 1',
'value 2' => 'Option Label 2'
])
->multiple()
];
}
 
//...

При использовании multiple() для Eloquent модели, требуется поле в базе типа text или json.
Также необходимо добавить cast - json или array или collection.

# Поиск

Если необходимо добавить поиск среди значений, то нужно добавить метод searchable()

searchable()
use MoonShine\Fields\Select;
 
//...
 
public function fields(): array
{
return [
Select::make('Country', 'country_id')
->options([
'value 1' => 'Option Label 1',
'value 2' => 'Option Label 2'
])
->searchable()
];
}
 
//...

# Асинхронный поиск

У поля Select так же можно организовать асинхронный поиск. Для это необходимо методу async() передать url, на который будет отправляться запрос с query параметром для поиска.

async(?string $asyncUrl = null)

Возвращаемый ответ с результатами поиска должен быть в формате json.

[
{
"value": 1,
"label": "Option 1"
},
{
"value": 2,
"label": "Option 2"
}
]
use MoonShine\Fields\Select;
 
//...
 
public function fields(): array
{
return [
Select::make('Country', 'country_id')
->options([
'value 1' => 'Option Label 1',
'value 2' => 'Option Label 2'
])
->searchable()
->async('/search')
];
}
 
//...

# Редактирование в preview

Метод updateOnPreview() позволяет редактировать поле Select в режиме preview.

updateOnPreview(?Closure $url = null, ?ResourceContract $resource = null, mixed $condition = null)
  • $url - url для обработки асинхронного запроса,
  • $resource - ресурс модели на которую ссылается отношение,
  • $condition - условие выполнения метода.

Параметры не являются обязательными и их необходимо передавать, если поле работает вне ресурса.

use MoonShine\Fields\Select;
 
//...
 
public function fields(): array
{
return [
Select::make(Country)
->updateOnPreview()
];
}
 
//...

# Значения с изображением

Метод optionProperties() позволяет добавить изображение к значению.

optionProperties(Closure|array $data)
use MoonShine\Fields\Select;
 
//...
 
public function fields(): array
{
return [
Select::make('Country', 'country_id')
->options([
1 => 'Andorra',
2 => 'United Arab Emirates',
//...
])->optionProperties(fn() => [
1 => ['image' => 'https://moonshine-laravel.com/images/ad.png'],
2 => ['image' => 'https://moonshine-laravel.com/images/ae.png'],
//...
])
];
}
 
//...

# Опции

Все опции choices доступны для изменения через data attributes:

use MoonShine\Fields\Select;
 
//...
 
public function fields(): array
{
return [
Select::make('Country', 'country_id')
->options([
1 => 'Andorra',
2 => 'United Arab Emirates',
//...
])
->multiple()
->customAttributes([
'data-max-item-count' => 2
])
];
}
 
//...

За более подробной информацией обратитесь к Choices .