# 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 .
# Нативный режим
Метод native()
отключает библиотеку Choices.js и выводит select в нативном режиме
Select::make('Type')->native()