Поддержка
Ресурсы

Формы

Настройка форм создания и редактирования записей

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

Система предоставляет три метода разной степени специфичности для настройки полей.

fields()

Обязательный метод. По умолчанию система собирает и таблицы, и формы из этого метода.

app/Frame/PostResource.php
public function fields(): array
{
    return [
        ID::make('ID'),
        Text::make('title', 'Название статьи')
            ->sortable(),
        Toggle::make('is_published', 'Опубликовано')
            ->editable(),
        DateTime::make('created_at', 'Дата создания')
            ->format('d.m.Y H:i')
            ->sortable(),
    ];
}

fieldsForCreate()

Необязательный метод. Если определён — на странице создания записи будут использоваться поля из него, а не из fields().

app/Frame/UserResource.php
public function fieldsForCreate(): array
{
    return [
        Text::make('email', 'Email')
            ->required(),
        Text::make('name', 'Имя')
            ->required(),
        Password::make('password', 'Пароль')
            ->required(),
    ];
}

fieldsForUpdate()

Необязательный метод. Если определён — на странице редактирования записи будут использоваться поля из него, а не из fields().

app/Frame/UserResource.php
public function fieldsForUpdate(): array
{
    return [
        ID::make(),
        Text::make('email', 'Email')
            ->required(),
        Text::make('name', 'Имя')
            ->required(),
    ];
}
Для форм существует множество типов полей: текстовые поля, выпадающие списки, переключатели, загрузка файлов и другие. Подробнее в разделе Поля.

Класс-схема формы

Форму можно вынести в отдельный класс-схему и подключить через статическое свойство $form. Схема наследуется от Frame\Laravel\Schemas\Form и, помимо fields(), управляет раскладкой, кросс-полевой валидацией (rules() / messages()), а при необходимости — раздельными наборами полей для создания и редактирования.

app/Frame/Resources/ArticleResource.php
class ArticleResource extends Resource
{
    public static ?string $form = ArticleForm::class;
}

Мастер (wizard)

Раскладку формы задаёт метод layout(), возвращающий FormLayout:

FormLayout::STACKED
Все панели на одном холсте (по умолчанию).
FormLayout::TABS
Панели как вкладки.
FormLayout::WIZARD
Панели как последовательные шаги мастера.

В режиме мастера каждая панель — это шаг. Шаги настраиваются методами панели: ->description() (подпись шага), ->optional() (пропускаемый шаг), ->showWhen('field') (условный шаг — появляется только когда поле заполнено).

app/Frame/Schemas/AddressForm.php
use Frame\Laravel\Enums\FormLayout;
use Frame\Laravel\Schemas\Form;

class AddressForm extends Form
{
    public function layout(): FormLayout
    {
        return FormLayout::WIZARD;
    }

    public function fields(FrameRequest $request): array
    {
        return [
            Panel::make('Адрес', [
                Text::make('address', 'Улица, дом')->required(),
            ])->description('С чего начнём — сам адрес'),

            Panel::make('Локация', [
                Select::make('country', 'Страна')->options([...]),
                Select::make('city', 'Город')
                    ->optionsWhen('country', [...]), // зависимые опции внутри шага
            ])->description('Страна и город'),

            // Условный и необязательный шаг: появляется после выбора страны.
            Panel::make('Привязка', [...])
                ->description('К чему привязать адрес (необязательно)')
                ->optional()
                ->showWhen('country'),
        ];
    }
}