Поддержка
Поля

Переопределение поведения

Методы для изменения логики заполнения, получения и отображения данных поля

Методы ниже позволяют изменять логику заполнения, получения и отображения данных поля.

fillUsing

fillUsing
callable $callback → static
Устанавливает callback для заполнения поля. Используется, когда нужно изменить параметры перед сохранением данных.

Например, есть переключатель Toggle, отвечающий за публикацию записи, и мы хотим автоматически заполнять дату публикации:

->fillUsing(fn(Model $model, FrameRequest $request, $value) => $model->fill([
    'published_at' => $value ? now() : null,
]))

resolveUsing

resolveUsing
callable $callback → static
Устанавливает callback для изменения данных модели после получения из БД.

Допустим, у нас есть таблица мероприятий с JSON-полем дополнительных настроек, внутри которого указано, обязательна ли регистрация. Чтобы корректно сопоставить значение из JSON и элемент Toggle:

Toggle::make('register', 'Регистрация обязательна')
    ->resolveUsing(
        static fn (FrameRequest $request, Event $event) => $event->meta['register'],
    )
    ->fillUsing(fn(Model $model, FrameRequest $request, $value) => $model->fill([
        'meta->register' => $value,
    ]))

displayUsing

displayUsing
callable $callback → static
Устанавливает callback для отображения данных на страницах списка и просмотра записей.

Например, на странице редактирования отображается только число, а на страницах просмотра — строка с окончанием «руб.»:

Number::make('amount', 'Стоимость')
    ->displayUsing(
        fn(FrameRequest $request) => $request->isResourceUpdateOrCreateRequest()
            ? $this->resource->amount
            : \Illuminate\Support\Number::format((int) ($this->resource->amount ?? 0), 2) . ' руб.',
    )

Вычисляемые и зависимые поля

Эти методы связывают поля формы между собой: одно значение вычисляется из других прямо в браузере, либо набор опций селекта зависит от значения соседнего поля.

computedFrom
array|string $sources, string $transform = 'copy', string $separator = ' ' → static
Вычисляет значение поля из соседних полей на клиенте, по мере ввода — без запроса на сервер. Поле остаётся редактируемым: ручная правка останавливает авто-подстановку. Преобразования: copy (склейка), slug, upper, lower, sum.
deriveVia
string $action, array|string $sources → static
«Аварийный выход» для вычисления, которому нужны привилегированные данные (БД, секреты): форма отправляет значения источников в указанное действие одним вызовом и записывает возвращённое значение.
optionsWhen
string $parent, array $map → static
Метод поля Select: набор опций зависит от значения соседнего поля на клиенте, без запроса на сервер. Карта — значение_родителя => опции.
dependsOn
array $map → static
Каскадные асинхронные опции для полей со связью/поиском: список подгружается с сервера и фильтруется по значению родительского поля. Карта — поле_родителя => колонка_фильтрации.
Text::make('title', 'Заголовок'),

// slug генерируется из заголовка автоматически, можно поправить вручную
Text::make('slug', 'URL-адрес')
    ->computedFrom('title', 'slug'),
// Город зависит от выбранной страны (клиентская фильтрация опций)
Select::make('city', 'Город')
    ->optionsWhen('country', [
        'ru' => ['msk' => 'Москва', 'spb' => 'Санкт-Петербург'],
        'de' => ['ber' => 'Берлин', 'muc' => 'Мюнхен'],
    ]),
Если значение должно вычисляться на сервере в момент сохранения и клиент не должен его диктовать, используйте связку ->readonly() + ->fillUsing(): логика объявляется в ресурсе, выполняется на сервере, а readonly гарантирует, что клиентское значение проигнорируется.