Konfigurácia
Publikovaný config/forms.php umožňuje vymeniť modely balíka, zaregistrovať resolvery polí, mapovať typy polí na typy hodnôt a doladiť nahrávanie súborov a schvaľovanie. Celý súbor:
return [
// Override any model with your own subclass.
'models' => [
'form' => \RoundlyConsulting\Forms\Models\Form::class,
'group' => \RoundlyConsulting\Forms\Models\Group::class,
'field' => \RoundlyConsulting\Forms\Models\Field::class,
'submission' => \RoundlyConsulting\Forms\Models\Submission::class,
'form_submission' => \RoundlyConsulting\Forms\Models\FormSubmission::class,
],
// Key type of the polymorphic sender columns: "bigint", "uuid" or "ulid" — anything else throws.
'key_type' => env('FORMS_KEY_TYPE', 'bigint'),
// Map a field `type` to the resolver that reads/writes its value.
// `default` is used for any type without an explicit mapping. Each value must be
// a class implementing Resolver; anything else throws.
'fields' => [
'default' => \RoundlyConsulting\Forms\Resolvers\DefaultResolver::class,
'file' => \RoundlyConsulting\Forms\Resolvers\MediaFileResolver::class,
'image' => \RoundlyConsulting\Forms\Resolvers\MediaFileResolver::class,
],
// Map a field `type` to the attributes AttributeType used to cast stored
// values and type-check submissions. Unlisted types (e.g. `time`) read back
// exactly as stored. A value that isn't an AttributeType case throws.
'field_types' => [
'number' => 'integer', // whole numbers; `decimal` / `float` map to 'float'
'range' => 'integer',
'float' => 'float',
'decimal' => 'float',
'checkbox' => 'boolean',
'boolean' => 'boolean',
'toggle' => 'boolean',
'date' => 'datetime',
'datetime' => 'datetime',
'multiselect' => 'array',
'checkboxes' => 'array',
'tags' => 'array',
],
// Media settings for file/image fields (backed by media-library-for-laravel).
'media' => [
'bucket' => 'attachment',
'visibility' => 'private',
'disk' => env('FORMS_MEDIA_DISK'),
'private_disk' => env('FORMS_MEDIA_PRIVATE_DISK', 'local'),
'accepted_mime_types' => null,
'max_file_size' => null,
'responsive_widths' => null,
'temporary_url_lifetime' => null,
],
// Submission review via approvals-for-laravel. Disabled by default.
'approvals' => [
'enabled' => env('FORMS_APPROVALS_ENABLED', false),
],
// Forms defined declaratively and synced to the DB with `php artisan forms:sync`.
'definitions' => [],
];Všetky kľúče
| Kľúč | Predvolené | Účel |
|---|---|---|
models.form | Models\Form | Model formulárov (model balíka alebo jeho podtrieda; iná trieda vyhodí výnimku). |
models.group | Models\Group | Model skupín. |
models.field | Models\Field | Model polí. |
models.submission | Models\Submission | Model riadkov odpovede (jeden na pole). |
models.form_submission | Models\FormSubmission | Agregát, ktorý združuje riadky jednej odpovede (predmet schvaľovania). |
key_type | bigint | Typ kľúča polymorfných stĺpcov odosielateľa: bigint, uuid alebo ulid (FORMS_KEY_TYPE); prázdna hodnota = nenastavené → bigint; iná hodnota vyhodí výnimku. |
fields.default | DefaultResolver | Resolver pre každý typ poľa bez vlastného mapovania. Každý záznam fields.* musí byť trieda Resolver; prázdny záznam sa považuje za nenamapovaný; čokoľvek iné vyhodí výnimku. |
fields.file / fields.image | MediaFileResolver | Uloží nahratý súbor ako médium na riadku odpovede. |
field_types | 12 mapovaní | Typ poľa → AttributeType pre typované čítanie a validáciu. Typ time zámerne nie je namapovaný a vráti sa presne tak, ako je uložený. Nenamapovaný typ — aj typ namapovaný na prázdnu hodnotu — sa číta ako reťazec; namapovaná hodnota, ktorá nie je AttributeType (integr), vyhodí výnimku. |
media.bucket | attachment | Skupina médií, do ktorej riadok odpovede ukladá súbory (reťazec; prázdna hodnota = nenastavené → attachment). |
media.visibility | private | private (podpísané streamovanie) alebo public; čokoľvek iné vyhodí výnimku. |
media.disk | null | Disk pre všetky súbory (FORMS_MEDIA_DISK); null alebo prázdna hodnota = podľa viditeľnosti — súkromné → media.private_disk, verejné → predvolený disk media library. |
media.private_disk | local | Neverejný disk pre súkromné súbory a ich varianty, ak je media.disk null (FORMS_MEDIA_PRIVATE_DISK). |
media.accepted_mime_types | null | Obmedzenie povolených mime typov na zoznam neprázdnych reťazcov (null alebo [] = bez obmedzenia). |
media.max_file_size | null | Maximálna veľkosť súboru v bajtoch, najmenej 1 (null = predvolené z médií). |
media.responsive_widths | null | Responzívne šírky obrázkov, kladné celé čísla (null = predvolený rebrík médií). |
media.temporary_url_lifetime | null | Platnosť podpísanej URL v minútach, najmenej 1 (null = predvolené z médií). |
approvals.enabled | false | Posielať odpovede na schvaľovanie (FORMS_APPROVALS_ENABLED). Číta sa striktne: true/1/on/yes alebo false/0/off/no; čokoľvek iné vyhodí výnimku. |
definitions | [] | Deklaratívne definície formulárov pre forms:sync (každá položka je pole). |
Prostredie (env)
Tri nastavenia sú riadené cez env, takže najčastejšie zmeny nevyžadujú publikovanú konfiguráciu:
FORMS_KEY_TYPE=bigint
FORMS_MEDIA_PRIVATE_DISK=s3-private # a non-public disk for private uploads
# FORMS_MEDIA_DISK= # leave unset to choose the disk by visibility
FORMS_APPROVALS_ENABLED=trueHodnotu key_type nastavte ešte pred migráciou: určuje typ polymorfných stĺpcov odosielateľa v tabuľkách submissions a form_submissions a všetky modely, ktoré používate ako odosielateľov, musia mať rovnaký typ kľúča. Prázdna hodnota (FORMS_KEY_TYPE=) sa považuje za nenastavenú a ponechá bigint; akákoľvek iná hodnota ako bigint, uuid alebo ulid vyhodí InvalidConfigurationException.
Striktné nastavenia
Kľúč bez hodnoty — chýba, je null alebo je prázdny ako riadok FORMS_MEDIA_DISK= v hostiteľskej aplikácii — použije svoju predvolenú hodnotu; voliteľný kľúč (media.disk, media.max_file_size, media.responsive_widths, media.temporary_url_lifetime) zostane nenastavený a prázdny záznam fields.* či field_types.* sa považuje za nenamapovaný. Každá nastavená hodnota musí sedieť, inak vyhodí RoundlyConsulting\PackageToolkit\Exceptions\InvalidConfigurationException s názvom kľúča:
- Celé čísla prijímajú int alebo reťazec s celým číslom — každá hodnota z env je reťazec —, takže 10MB či 5.5 vyhodí výnimku, namiesto toho, aby sa ignorovala.
- Názov skupiny médií či disku, ktorý nie je reťazec, vyhodí výnimku, rovnako ako preklep v media.visibility — ten sa už nečíta ako private.
- Chybná položka zoznamu vyhodí výnimku — v accepted_mime_types, responsive_widths alebo položka definitions, ktorá nie je pole.
- Každý záznam fields.* musí byť trieda Resolver a každá hodnota field_types prípad AttributeType.
- FORMS_APPROVALS_ENABLED prijíma true/1/on/yes alebo false/0/off/no; čokoľvek iné vyhodí výnimku.
php artisan about chybné nastavenie zobrazí ako INVALID, namiesto toho, aby zlyhal.
Prejavte lásku k open source
Tento balík je zadarmo pod licenciou MIT. Ak vám šetrí čas, jednorazový príspevok alebo členstvo na Patreone nám pomôže ho ďalej udržiavať, testovať a dokumentovať.
Ďalšie spôsoby podpory vrátane kryptomienOdoslaním daru súhlasíte s našimi podmienkami prijímania darov.
Chcete to zabudovať do svojho produktu?
Naše balíky integrujeme do zákazkových Laravel a AI riešení. Napíšte nám, na čom pracujete, a ozveme sa do 48 hodín.