---
url: /guide/forms.md
description: >-
  Scheduler Pro builds a create and edit form from your attributes. Extend it,
  replace it, or control persistence.
---

# Forms

With no schema, Scheduler Pro builds a form from your attributes: title, resource, start, end, progress, dependencies and repeat. Extend it or replace it:

```php
$scheduler->schema(fn (array $defaults) => [
    ...$defaults,
    Select::make('phase')->options(Phase::class)->required(),
]);
```

Create and edit run as native Filament actions (`createEvent`, `editEvent`), so everything you know about Filament forms applies.

* Field defaults are kept, and the dragged slot is filled in.
* Rule violations appear as notifications and keep the modal open.
* `RecurrenceField::field()` adds the **Repeat** section to your own schema.

## Persistence

```php
$scheduler->createRecordUsing(fn (array $data) => Appointment::create([
    ...$data,
    'booked_by' => auth()->id(),
]));
```

## Who can create

```php
$scheduler->creatable(fn () => auth()->user()->isReceptionist());
```
