Поля
Переопределение поведения
Методы для изменения логики заполнения, получения и отображения данных поля
Методы ниже позволяют изменять логику заполнения, получения и отображения данных поля.
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 гарантирует, что клиентское значение проигнорируется.